約 4,674,369 件
https://w.atwiki.jp/katzchang/pages/12.html
このページはhttp //ioke.org/wiki/index.php/Guideからの引用です Guide Introduction はじめに Ioke is a general purpose language. It is a strongly typed, extremely dynamic, prototype object oriented language. It ishomoiconicand its closest ancestors areIo,Smalltalk,RubyandLisp- but it s quite a distance from all of them. It looks a lot like Io, to a limit. Iokeは汎用言語です。極動的な強い型付け、プロトタイプベースのオブジェクト指向言語です。homoiconic(http //en.wikipedia.org/wiki/Homoiconicity)であり、Io、Smalltalk、Ruby、Lispに近い系統の言語です。が、それらとは大きな違いもあります。見た目はほとんどIoです。to a limit? Ioke is afoldinglanguage. This means it folds in on itself. You can create new abstractions covering any of the existing abstractions in the language. You can abstract over these, over and over again, until you have a language that lets you express what you want to express in a succinct and readable way. Ioke allows you to fold your code. Iokeは織り込み(いい言葉はない?)言語です。自分自身に織り込むということです。言語が用意する既存の抽象階層を拡張する新たな抽象階層を、自由に作成できます。その抽象階層をさらに拡張することも可能で、必要に応じた簡潔で読みやすい言語を作ることもできます。Iokeにあなたのコードを織り込むことができます。 Ioke is targeted at the Java Virtual Machine and is tightly integrated with the platform. Why the JVM? It s available everywhere, it gives several important features such as world class garbage collectors, capable thread schedulers and an amazing JIT compiler. All of these are things that serve Ioke well, without requiring direct development resources from the Ioke team. Access to the Java platform also means access to all existing libraries and functionality, with all that entails. The JVM is just a very pragmatic choice. IokeはJVM(Java Virtual Machine)をターゲットとして、JVMプラットホーム上で開発されています。なぜJVMか?どこでも実行可能で、ガベージコレクタや優秀なスレッドスケジューラ、素晴らしいJITコンパイラなどの重要な機能をサポートしているからです。それらの機能はすべてIokeにも必要な機能を、Ioke開発チームが直接作る必要がありません。Javaプラットホームへのアクセスできるということは、必然的に、既存のライブラリや機能性へアクセスできるということになります。JVMは実に実用的な選択です。 You re probably reading this guide atioke.org. That is the official home of the project, although some of the project functionality is hosted atKenai, where such things as mailing lists and a bug tracker is available. The canonical source repository for Ioke is onGitHub. 今あなたは、ioke.orgにあるガイドを読んでいると思います。ioke.orgはこのプロジェクトの公式サイトです。また、メーリングリストやバグ管理などのプロジェクト機能の一部はKenaiにあります。Iokeの正式なソースレポジトリはGitHubにあります。 The current version of Ioke is calledIoke E. The naming of Ioke will change regularly with major revisions. There are two different versions in play here.Ioke Eis the name and version of the language and core libraries. The initial implementation forIoke Eis calledikj 0.3.0, and the version numbers are not interdependent. The next major version of Ioke will be calledIoke P, and you can find information about it in the chapter onfuture plans. Iokeの現行バージョンはIoke Eです。Iokeの名前はメジャーバージョンで変わるよう付けています。2つのバージョンがあり、Ioke Eは言語仕様とコアライブラリのバージョンを指しています。Ioke Eの最初の実装はikj 0.3.0で、バージョン番号は相互依存ではありません。次のメジャーバージョンはIoke Pで、情報はfuture plansの章にあります。 This programming guide -- together with the reference for your current version -- should be the complete document needed to understandIoke E, how to program in it, how to understand the names and concepts used, and also give an initial inkling on what I think is good taste. このプログラミングガイドは(あなたのカレントバージョンのリファレンスもそうですが)、Ioke Eを理解するためのドキュメントであり、どのようにプログラムを作成するかとか、どのように用語やコンセプトを理解するかとか、私がいいと思うような初期のほのめかしも書かれています。 Note that I will use many names that aren t necessarily the same as the ones traditional programming languages use. These names will be made clear sooner or later in this document, but it might help some to jump forward toObjects, skim that bit, and then start over once words lik eOrigin,cellandmimicmake sense. ここで使う用語は、既存のプログラム言語で使われる用語と意味が同じとは限りません。用語についてはドキュメント内で時機に明確になりますが、Objects章、とくにOrigin、cell、mimicについて、さらっと読んでおいてもいいかも知れません。 Vision 構想 The evolution of programming languages is a steady progression of finding new ways to express abstractions naturally - in a way that doesn t stray too far away from the smaller details. A programming language has to make it possible to abstract away common things, while making it easy to customize these abstractions in very detailed ways. A programming language should be able to do this well without sacrificing readability and understandability. This tension lies at the core of programming. プログラミング言語の進化は、抽象階層を自然に記述する新しい方法を見つけるための着実な前進です。より詳細な点からそんなに遠く外れることはなく?。プログラミング言語は共通事項の抽象化を可能にし、細部に渡る抽象階層を簡単にカスタマイズ可能にしました。プログラミング言語に読みやすさや理解しやすさも必要です。この葛藤こそが、プログラミングの本質です。 How do you create a language that makes it easy to express powerful concepts in a succinct way, while still making it easy to maintain and work with after the fact, without turning it into a new compression mode? How do you make it easy for a programmer to express high level abstractions that are abstractions of abstractions of abstractions? では、言語をどのように作れば、簡潔な方法でパワフルかつ簡単に概念を記述できるようになるのでしょうか?同時に、事後の保守を簡単に出来るようにするには?新しい圧縮モード(?)を不要とするには?言語をどのように作れば、プログラマが抽象階層の抽象階層の抽象階層といった、高レベルの抽象階層を簡単に書くことができるのでしょうか? There are many open problems in programming language design. Concurrency is one of them, performance another. These are two areas Ioke does not address. Instead, Ioke is a remodeling of the core concepts and ideas embodied in other programming languages. プログラミング言語設計には、多くの未解決問題があります。一つは並列処理で、もう一つはパフォーマンスです。これら2つの問題領域には、Iokeは踏み込んでいません。その代わりに、Iokeはコア構造の再構築を可能にし、他のプログラミング言語のアイデアを盛り込めるようにしています。 Are Lisp and Smalltalk still the most powerful languages around, or are there ways of providing more expressiveness without sacrificing understandability? Is there a way to combine all the lessons learned from languages like Ruby and Python, and patch them back into a Lisp and Smalltalk core? Is it possible to do this while taking some of the benefits of Io? Can a language be both small, regular, homoiconic, reflective and easy to understand? I hope that Ioke is just that. Simplicity doesn t mean lack of power. Small, simple, orthogonal functionality can be more powerful than larger, complicated abstractions that don t fit together. Io explicitly states that the goal of the language is to refocus attention on expressiveness, and with Ioke I want to take that philosophy one step further. It s important to realize that an experiment like this doesn t necessarily have to mean the language can t be used for real projects. By wedding Ioke to the Java Virtual Machine, I make it easy to get access to good libraries and existing implementations on most platforms. In that way, Ioke can be used to create real systems, even though the ecosystem will initially be very small. And I think that this is necessary. How can you know if a language really is worthwhile or not, if you can t use it as a general purpose programming language? The Java platform makes this possible. Getting started はじめよう Ioke is very easy to get started with. The first step is to download a package. Which one you choose depends on what platform you re on, and whether you want to build Ioke yourself, or just start using it. This guide will only cover using a prebuilt version. Go to thedownload page, and grab one of the distributions. At the time of writing the full version of Ioke is Ioke E ikj 0.3.0. Choose the latest download in the 0.3-series for this document to apply. Once you have downloaded the distribution, you need to unpack it somewhere, and finally add thebindirectory to yourPATHenvironment variable. There is also ajardownload that can be run directly. If you choose this option you don t get the benefits of having a home for Ioke, which in some cases might be inconvenient. Ioke can be run directly from the jar file, though. Building Ioke Iokeのビルド If you d like to build Ioke from source, make sure you have a recent version of theJava Development Kitinstalled (1.5.0 or higher, preferrably 1.6.0) andApache Ant. You must have theantscript reachable from yourPATHvariable. Then, simply check out the source code from themain repository, and build it usingant. That should run all the compilation steps and tests, and allow thebin/iokescript to run. Just proceed as if you had unpacked the distribution, adding thebindirectory to thePATH. Running scripts スクリプトを実行 To run an Ioke script, you can generally just use theiokecommand $ ioke helloWorld.ik Hello world You can also execute snippets of code on the command line using the-eargument to theiokecommand. You can have several of these in the same line too $ ioke -e Hello world println -e Goodbye world println Hello world Goodbye world When using-e, be careful about what quoting style you use, since the shell sometimes can munge up your commands if you don t surround them correctly. Theiokecommand has several helpful command line options, which can change what happens during execution. These are -Cdirectory Switch to directory before executing any files and command line scripts. This will make the directory the initial current working directory for Ioke during the execution of the JVM. -d Enable debug output. -e script Execute script, as describe above. May occur more than once on a command line. -h --help Display help information, including descriptions of these command line options. -Idirectory Add directory to the load path of Ioke. May occur more than once on a command line. -JjvmOptions Pass on options to the JVM. This can be used to change any runtime parameters that your JVM takes. May occur more than once. The options are provided directly after the -J, so if you want to change the maximum amount of memory used, you can do that writing -J-Xmx128M. --copyright Print copyright information and exit. --version Print version information and exit --server Run the JVM in server Hotspot mode --client Run the JVM in client Hotspot mode (the default) -- Mark the end of options to theiokescript, anything after this are options to be sent to the code running. If you provide the name of a script file on the command line, it should come after all the arguments to theiokescript. Everything after the script will be added as data to theSystem programArgumentscell. You can use both one-line scripts with-eand specify a script file. If so, the script file will be run after the one-line scripts. Interactive mode インタラクティブモード If no code to execute has been specified to theiokescript,IIk - Interactive Ioke- will start. This is a REPL that allows the execution of arbitrary code in a shell that immediately displays the result. The main difference between running Ioke from a file and interactively is that the interactive prompt will show a notice of the result of the last operation after each execution. IIk will also invoke a debugger when aconditionis encountered. This debugger gives you the possibility to inspect what happened more closely. The final difference with IIk is that it does not execute code directly in Ground - which the top level inside an Ioke script will do. This difference is crucial, when considering namespacing issues. IIk will try to use Readline through JLine if your platform supports it. IIk will be more closely described later, but just to give you a glimpse, this is how a small session could look like iik hello world println hello world + nil iik 10 * 20 + 200 iik 3/2 + 3/2 iik 3/2 + 3/2 + 3 iik 3/2 * 3 + 9/2 iik foo = hello + hello iik foo + hello iik exit Bye. When you see the prompt iik , you know that IIk is waiting for input. The result of a computation is shown after the + sigil. You can exit from IIk by calling either exit or quit . There is also a restart named quit that can be invoked to quit IIk. Syntax 構文 Ioke has no keywords or statements. Everything is an expression composed of a chain of messages. A piece of code is represented as a chain of messages that links to the next message. The result of one message will be the receiver of the next message, until a . message is received. The . message is a terminator that throws away the current receiver. A newline will serve as a . message in the circumstances where it feels natural. An informal BNF description of Ioke looks like this program = messageChain? messageChain = expression+ expression = message | brackets | literal | terminator literal = Text | Regexp | Number | Decimal | Unit message = Identifier ( ( commated? ) )? commated = messageChain ( , messageChain )* brackets = ( [ commated? ] ) | ( { commated? } ) terminator = . | \n comment = ; .* \n What isn t visible here is that all whitespace -- except for newlines -- will work only as separators of messages, and is otherwise ignored. That means that message sending does not use the dot, as in most other languages. A phrase such asfoo().bar(quux(42)).baaz()would be expressed asfoo() bar(quux(42)) baaz(), or more succinctlyfoo bar(quux(42)) baazin Ioke. All the types of literals are actually turned into a message to create that literal, so the canonical form of the message chain contains no literals, just a message to create that literal. Any message can have zero or more arguments given to it. Arguments are separated with comma. If there are no arguments to a message, the parenthesis can be left off, but they need to be there if there are arguments. Mostly any combination of characters can be used as an Identifier, with some exceptions. There used to be a parsing element called operators, but these have now been included into identifiers. They are not parsed differently at all, but the operator shuffling step will handle them differently. Specifically, operators can be used in infix, including having different precedence rules. Assignment is a specific form of operator which gets its own kind of shuffling. These are both described below. An identifier in Ioke can be one of several things. Ioke takes the rules for Java identifiers, and adds some more to them. All Unicode letters and digits can be part of an identifier, except for the first entry. Underscores are allowed, just like in Java. Ioke also allows colons as an identifier. Exclamation mark and question mark is allowed anywhere in the identifier except for in the beginning. Identifiers can be broadly classified into identifiers and operators, where operators can be any combination of several sigils. There are also some special operators that have restrictions. These are Opening and close brackets are not allowed, except together with its counterpart, so [ is not a valid identifier, while [] is. So is {}. () is not valid either. Two or more dots is a valid identifier. A hash sign can be followed by any operator char, but isn t parsed as an identifier by itself. Slash is not an operator char, but can be used as it except in combinations that look like regular expressions. The operator chars are +, -, *, %, , , !, ?, ~, , |, ^, $, =, @, , ` and . These can be combined together in any order, and any number, except for the caveats noted before. That means the available operator space is infinite, and very wide. Combinations of letters and operator characters are generally not allowed, except for the exceptions with , ! and ?. This is to make it possible to have infix operations without spaces in some situations. The two forms of brackets will get turned into a canonical form. Surrounding comma-separated message chains with square brackets is the same as calling the method [], giving it those message chains as argument. So [foo, bar, quux] is exactly the same as [](foo, bar, quux). The same is true for curly brackets. Comments start with semicolon and end at the first newline. They can be used mostly anywhere, except inside of literal texts. The hash sign followed by an exclamation mark is also a comment, to allow the shebang line in Unix scripts. How and when the actual evaluation of messages happen depend on what kind the message type is. If it s inactive, the value reflecting that cell will be returned. If it s active, the cell will be activated and the result of that activation returned. How the activation depends on what kind of code the cell contains. The various kinds of code is described more closely in the chapter aboutcode. Literal values リテラル値 Ioke currently contains four different kinds of literals. There is a fifth quasi literal, that isn t exactly parsed as a literal, but will be evaluated differently based on its name. These literals are texts, regular expressions, integers and decimal numbers. Symbols are actually parsed as regular identifiers, but they are handled a bit differently during evaluation. Text テキスト A literal text in Ioke is what is generally called strings in most languages. As in most languages, text is written inside of double quotes. Any characters are valid inside of those double quotes. That includes newlines - so you can write a literal text that extends to several lines. There is an alternate syntax for text when the value contains a lot of double quotes. As in most other languages, several escapes are valid inside of a text. Escapes are preceded by the backslash, and insert the character corresponding to the escape values. These escapes are \b Inserts the backspace character, that is represented in ASCII by the decimal value 8. \e Inserts the character that is represented in ASCII by the decimal value 27. This value is used for sending escape values to the TTYs in some operating systems. \t Inserts the TAB character - ASCII decimal 9. \n Inserts the newline character - ASCII decimal 10. \f Inserts the form feed character - ASCII decimal 12. \r Inserts the carriage return character - ASCII decimal 13. \ Inserts the double quote character - ASCII decimal 34. \\ Inserts the backslash character - ASCII decimal 92. \[newline] Inserts nothing at all. Used to escape necessary newlines, without having them show up in the output text. \# Inserts a literal hash character - ASCII decimal 35. \uABCD Inserts the Unicode codepoint corresponding to the hexadecimal value of the four characters following the u . All four hexadecimal characters need to be specified. \7, \12, \316 Inserts the Unicode codepoint corresponding to the octal value of the one, two or three octal characters. The maximum value allowed is \377, and the minimum is obviously \0. Ioke also supports an alternative text syntax that can be used when the text in question contains many scare quotes. The alternative syntax starts with #[ and ends with ]. A right bracket will have to be escaped, but scare quotes doesn t have to be. The parsing of text will generate a message with name internal createText . This message will get one argument that is the raw Java String corresponding to the text. Ioke allows automatic interpolation of arbitrary values in the same manner as Ruby. It uses the same syntax for this, which is the #{} syntax inside a text. These can be nested in any way. The elements will be parsed and sent as arguments to the message with name internal concatenateText . So an Ioke text such as foo bar#{flux} will #{1+2} will generate the message internal concatenateText( foo bar , flux, will , 1+(2), ). As you can see, there is a small amount of waste in the way this is generated -- but the simple model makes it easy to understand. It s not guaranteed that this will remain the same, although the message will definitely remain. Some examples foo flax\mux one two #{three}\bfour #[you don t really #{1+2+3} believe that?] Regular expressions 正規表現 Ioke has very capable regular expressions. Exactly what you can do with them can be found further down in this guide. The literal syntax allows regular expressions to be embedded in code directly. The syntax for this starts with a #/ and ends with another /. The last slash can optionally be followed by some flags that change the behavior of the expression. Regular expressions can also use an alternative syntax that starts with #r[ and ends with ]. Just as with Text, regular expressions can contain interpolation. This interpolation will be transformed into regular expressions and then combined with the outer regular expression. A few examples might be in order here #//#r[]#/foo/#r[foo]#/fo+/x#r[fo+]x#/bla#{ foo }bar/#r[bla#{ foo }bar] The first example is an empty regular expression. The second is an expression matching the word foo . The third expression matches an f followed with one or more o . It also allows extended regular expression syntax, due to the x flag. The flags supported in Ioke are x, i, u, m and s. The meaning of these match the meaning of corresponding Ruby flags. Regular expressions allow most of the same escapes as Ioke text. Specifically, these escapes are supported b, t, n, f, r, /, \ and newline. Unicode and octal escapes also work. The fourth example shows the insertion of a literal text inside of a regular expression. Ioke regular expressions will be transformed into a call to internal createRegexp. This message expects two Java strings, one with the actual pattern, and one with the flags. Integers 整数値 Ioke supports arbitrarily sized numbers. It also contains a numerical tower that can be more closely explored in the reference documentation. The numerical tower is based in Number. Number Real mimics Number. Number Rational mimics Number Real, and so does Number Decimal. Finally, Number Integer and Number Ratio both mimics Number Rational. The interesting parts of this tower is Number Integer, which corresponds to integers, Number Ratio, which is any ratio between two integers, and Number Decimal, which corresponds to decimal numbers. These are arbitrarily sized and exact. There are no floats or doubles in Ioke. There is also a potential place for Number Complex at the same layer as Number Real, although complex numbers are not currently implemented. There are also plans for implementing a unit system further down the line. Literal integers can be written using either decimal or hexadecimal notation. Hexadecimal notation begins with 0x or 0X and are then followed by one or more hexadecimal letters. They can be either upper or lower case. A decimal literal number is written using one or more decimal letters, but nothing else. There is no literal to create ratios - these can only be created by division of integers. Negative numbers have no literal syntax, but preceding a number with a minus sign will call the message - on the number and generate the negative value. A literal integer will be transformed into a call to internal createNumber, which takes one native Java String from which to create the number. Some examples 123444444444444444444444444444444444444423523453453400xFFFFF Decimals 数値 Literal decimal values can be written either using exponential notation, or using a decimal dot. A decimal dot notation can be combined with exponential notation. Exponential notation starts with a number or a decimal number, followed by lower or upper case E, followed by an optional sign, and then followed by one or more decimal letters. A literal decimal will be transformed into a call to internal createDecimal, which takes one native Java String from which to create the decimal. Some examples 0.01E61E-3223.4445e10 Symbols シンボル Symbols aren t exactly syntax, but they aren t exactly messages either. Or rather, they are messages that will evaluate to the symbol that represent themselves. Symbol is a kind in Ioke. There are two kinds of symbols - the first one is simple symbols that can be parsed as is. The second is symbols that can t be parsed as is. Symbols are preceded by a colon and then directly followed by the symbol text. If it can t be parsed correctly, the value should be surrounded by quotes, and this will be turned into a call to the method , which takes the text as argument. That means that you can actually get dynamic symbols by calling the method. Some examples foo flaxBarFoo mux mex mox\n Operator shuffling 演算子のようなもの One exception to the way message handling works in Ioke is operators. All the so called operators in this section is possible to call directly in message passing position too -- but to make it possible to use them in a more natural way, the parsing step will handle them a bit differently, and then do a shuffling step that actually takes operator precedence into account. So all the common operators will generally work as you expect them to -- although I recommend adding parenthesis when something is possibly unclear. Ioke has a slightly larger amount of operators than most other languages. Most of these are currently unused, but they are certainly available for use for any purpose the programmer wants to use it for. Many adherents of other languages (Java, I m looking at you) claim that operator overloading is evil. I don t believe that is true, seeing as how it works so well in Ruby, so Ioke instead allow you quite large freedom with regards to operators. The precedence rules for regular operators can be found in the cell Message OperatorTable operators , which is a regular Dict that can be updated with new values. The new values will obviously not take effect until the current code has run, and a new parse is started. Note that the below is only the operators that have defined precedence rules. As noted in the section on syntax, you can use any operator you want really. It is easy to add new precedences to the table, either temporarily or permanently. At the time of writing, the available operators - in order of precedence - are these ! ? $ ~ # ** * / % + - = = = == != === =~ !~ ^ | ? || ?| .. ... = - - + ! % # @ / * ? | ^ ~ - + ! % # @ / * ? | ^ ~ = ** ** || || $ $ += -= **= *= /= %= and nand = = ^= or xor nor |= ||= = = - return And as mentioned above, all of these can be used for your own purpose, although some of them already have reserved meanings. This document will cover most of the used operators, while the rest can be found in the reference. Since this operator shuffling happens, that also means that an Ioke program has a canonical inner form that can differ from the source text. When you use introspection of any kind, you will get back that canonical form which might not look exactly like you expected. Similarly, if you ask some code to print itself, it will use the canonical form instead of the operator skin. Macros that modify message chains should work against the canonical form, and nothing else. What an operator does depends on the result of sending the message of that name to the receiver, just like regular messages. In fact, to Ioke there really isn t any difference, except that the parsing takes special notice about operators and assignment operators. Assignment shuffling 代入のようなもの Much like with regular operators, trinary - assignment - operators are subject to a kind of shuffling. This shuffling differs from regular operator shuffling, in that it will shuffle around two things - the left hand side and the right hand side. This is true for every assignment operator except for the unary ones, which will only reshuffle one message. A few examples might make the translation easier to perceive. The first item is the readable form, while the second form is the canonical form foo=1+2=(foo,1+(2))Groundfoo*= text Ground*=(foo, text )bar foo(123)=42bar=(foo(123),42)flux++++(flux) These examples show some more advanced details -- specifically the fact that assignment operators generally work on places , not on names or cells. This will be more explored in the chapter onassignment. The important thing to notice from the above examples is that for most assignments two things will be rearranged. For the unary operators only one thing will be moved. Just as with regular operators, the assignment operators have information in the Message OperatorTable cell. The specific cell is Message OperatorTable trinaryOperators , and it matches an assignment operator to either the integer 1, or the integer 2. Everything with 1 will be matched as being unary assignment. The currently available assignment operators are = ++ -- += -= /= **= *= %= = = |= ||= ^= = = Just as with regular operators, what an assignment operator does depend on what the result is from sending the message of that name to the receiver object, just like with any type of message. Inverted operators 否定演算子 In addition to the regular binary operators and the trinary assignment operators, Ioke also sports inverted operators. These aren t actually used anywhere in the core distribution, but they might be useful at some time or another. The basic idea is that sometimes you want to have the right hand side of an expresssion become the receiver of an operator call, and the left hand side become the argument to the operator. Inverted operators allow this. As with both the binary and trinary operators, you can find and update information about inverted operators in the cell Message OperatorTable invertedOperators . To make this a little less abstract, let us look at two simple examples and what they translate into foo [1,2,3,4]map(asText);; will be translated to[1,2,3,4]map(asText) ( foo );; provided we have an inverted;; operator called doit abc foo quux doit another time;; will be translated toanother time doit(abc foo quux) Execution model 実行モデル The way an Ioke program works is very simple. Everything executes based on two things. The first is the context, or the ground, and the second is the receiver. The first message sent in each message chain will have the ground as receiver. The default ground in Ioke source files is an object calledGround. This object is in the mimic chain for most regular objects created in Ioke, which means that things defined at the top level will generally be available in most objects. Inside of methods and blocks, the ground will be different. Exactly in what way is defined by the type of code executing. Every message in a chain will be sent to the receiver of that message. That receiver is the result of the last message, or the current ground if there was no previous message, or if that previous message was a terminator. So Ioke code likefoo bar(flux bar) quuxinvolves 5 different messages. The messagefoois sent toGround, which is the current ground and also the default receiver. The messagebaris sent to the result of thefoomessage. The value returned will be activated. The cellbarcontains a method in this case, and that method expects one argument, so that forces evaluation of the arguments. The messagefluxis sent toGround, since it s the ground and there is no prior message inside of an argument list. The messagebaris sent to the result of thefluxmessage. The result of thebarmessage is used as the argument value given to the outsidebarmethod. The messagequuxis sent to the result of the initialbarmessage. The result of thequuxmessage is thrown away, unless this code is part of a larger piece of code. This description generally describes what happens in the case of this code. The more general control flow is this A message is encountered If the message is a symbol message, the corresponding symbol will be returned. Otherwise the name of the message will be looked up in the receiver, or in the receivers mimics. If the name is found and is not activatable, the value of that name (the cell) is returned. If the name is found and is activatable, it will be activated, with the current ground, receiver and message sent to the activatable object. If the name is not found, a second search is done for the namepass. If a pass is found, use that instead of the name of the original message, and go back to 4. If a pass is not found, signal aCondition Error NoSuchCellcondition. Exactly what happens when an object is activated depends on what kind of code gets activated. It s really up to the method, block or macro to handle evaluation of arguments in any way it likes - including not evaluating them. For a description of the default models available, see the chapter oncode. Objects オブジェクト The object model of Ioke is quite simple. Everything in Ioke is an object that follows these same rules. An object is something with an identity. It can have zero or more mimics, and zero or more cells. An object can also have a documentation text. Some objects can have a native data component. This acts more or less like a hidden cell that contains information that can t be directly represented in Ioke - for example the actual text in a Text. Or the actual number in a Number. Or the actual regular expression in a Regexp. These objects are the core types that contain primitive information. A cell is the main way of representing data in Ioke. A cell has a name and a value. Every value in Ioke is a cell - every time you send a message, a cell is looked up for the value of that cell. Cells can contain any kind of data. In other languages, cells are generally called properties or slots. They are quite close to instance variables that also can contain methods. Cells can be added and removed at any time during runtime. A mimic could also be called the parent of the object. Ioke is a prototype based language, which means that there is no distinction between classes of objects, and the objects themselves. In fact, any object can be used as the class of a new object. The word for that is mimicking, since the word class loses it s meaning in this kind of language. It s most common for an object to mimic one other object, at least initially. It s impossible to create an object that doesn t mimic anything, but you can remove all mimics for an object after the fact. You can also add more mimics. This turns out to be useful to represent shared functionality in the manner of Ruby mixins, for example. The actual effect of a mimic is that when a cell can t be found in the current object, all mimics will be searched for that cell (depth-first). So all cells available in an object s mimic is available to the object too. This is the inheritance part of Object-Oriented Programming. In many places you will find the word kind being used. A Kind is by convention an object that is used primarily to use as a mimic for other objects. The convention is that kinds are named with an initial upper case letter, while everything else starts with a lower case letter. The assignment process of Ioke also uses this convention to automatically set a cell called kind on any object that gets assigned to a name matching this convention. The rest of this chapter will discuss the kinds that are the basis of the object system. Base The kind called Base is the top of the mimic chain. It s not generally useful in itself as it only defines the bare minimum of cells to make it possible to add new cells to it, mimic it, and so on. But if you want an object that is possible to use but not include most of the other stuff, Base is place to begin. Be careful when defining methods in Base, since it doesn t have access to most of the namespace. In fact, it doesn t even know about its own name. Base can act as a kind of blank slate, if needed, but it s probably easier to just create a regular object and remove all mimics from it after the fact. Base defines these cells kind returns the kind of the object, which is Base . notice returns the short notice of the object, which is Base . Refer toIntrospectionfor more information about notice. = Takes two values, the first a place and the second a value, and assigns the place named to that value. Refer toAssignmentfor more information about it. == Compares this object against the argument. Returns true if they are the same, otherwise false. cell Takes one argument that should be the name of a cell that exists, and returns the value of the cell unactivated. cell= Sets a cell to a specific value. Used to set cells that can t be set using the regular assignment model. Refer toAssignmentfor more information about it. cell? Takes one argument that should be the name of a cell to check if it exists in this objects mimic chain. cellNames Returns a List containing the names of all cells this object contains. cells Returns a Dict with all cells this object contains. The key is the name and the value is the cell value. cellOwner Returns the closest mimic that has a cell with the name given as argument to the message. A condition will be signalled if you try to find the owner of a cell that doesn t exist in this mimic tree. This method will only return the closest cell owner for the named cell. It will not use pass , so it s the responsibility of pass-implementers to make it return a correct result for those names. cellOwner? Takes the name of a cell and returns true if the receiver of the message defines a cell by that name, otherwise false. Note that there can be more than one cell owner in a message chain. This just returns true if the current receiver is the closest one. removeCell! Removes the named cell from the current object. This means that if the current cell shadowed cells in mimics, those can be called again. It only removes a cell if the receiver is the owner of that cell. Otherwise it is an error to call this method. undefineCell! Makes it impossible to find a cell from the receiver. In all ways it looks like this cell doesn t exist in the mimic chain at all, even if mimics define several implementations of it. The use of undefining can make an object conceptually totally clean from cells, although it might be hard to use the objec after that. An interesting side-effect of the way these methods work is that removeCell! can be used to remove the undefine. So if you call removeCell! with a cell name and a receiver that has been called with undefine earlier, that undefine-status will be removed, and access to mimic versions of the cell will be possible again. Look at the specs for a better understanding. documentation Returns the documentation text for this object, or nil if no documentation exists for it. documentation= Sets the documentation text for this object. mimic Returns a newly created object that has the receiver as mimic. This is the magic way of creation new objects in Ioke. It is also theONLYway to do it. All of these methods are described further in the reference. Ground As mentioned above, Ground is the default ground/context for evaluation. Ground IokeGround and JavaGround, and IokeGround mimics Base and DefaultBehavior. IokeGround is special in that this is the place where all top level kinds are defined. If you want to create a top level kind, you should put it in IokeGround. If you take a look in IokeGround, you will see that it contains cells for Text, Dict, List, Base, Origin, itself and many other. Ioke doesn t have any global state at all, but IokeGround is as close as it gets. IokeGround and Ground should in most cases not be mimicked directly. JavaGround is the place where all Java integration support is integrated into Ioke. Origin Origin should be the place where most objects in Ioke start from. It is specifically created to be the origin of objects. As such it doesn t contain many cells for itself, but it mimics Ground and has access to everything from Base, DefaultBehavior and Ground in that way. When adding new more or less global functionality, Origin is probably the best place to put it. Currently, the only cells Origin contains is for purposes of printing itself. Origin also happens to be the point where initialization is defined. This is really done as an aspect on mimic . If you want an object to be able to be initialized every time a new mimic of it is created, just create a method called initialize in your kind. It will be called by the mimic-aspect. Any arguments given to mimic will be ignored and passed along to initialize. An example Foo=OriginmimicFooinitialize=method( New foo created! println)FoomimicFoomimicFooinitialize=method(arg1, key ,selfvalue=[arg1, key])Foomimic(42, key 15)Foomimic(key blarg ,42) There is nothing special with the initialize method, so if you want more initialization to happen in a deep hierarchy, you will have to use super-calls and so on. DefaultBehavior DefaultBehavior is a mixin - meaning it should never be the sole mimic of an object. Mixins are generally not grounded in Base, and doesn t contain most of the things you would expect from an object. DefaultBehavior contain almost all the general methods you use when programming Ioke. It contains the internal methods to create values from literals, and most other functionality specified in this document. In short, DefaultBehavior is the work horse, and you should have a pretty good reason to not have it in the mimic chain of an object. Since Ground mimics DefaultBehavior, any object you create from Origin, will have DefaultBehavior in its mimic chain. nil, true, false The three values nil, true and false are the only values that are considered kinds, even though they start with lower case letters. They are not like the other kinds in the other important way either - these values can not be mimicked, and you will get a condition if you try it. The reason is that Ioke s basic boolean system revolves around these values. It is not entirely certrain that these values will forever be the only boolean values, but for now they are. nil should be used to represent the absence of a value, including the absence of a reasonable return value. false is the quintessential false value, and true is the quintessential true value. The value true isn t strictly necessary since any value except for nil and false are true. This notion of truthness mimics Ruby. The cells nil, true and false are defined in Ground, and they can actually be overridden or changed - but I don t recommend it. I can guarantee lots of chaos and non-working programs from doing it. More info on how these values interact can be found in the section onComparison. Assignment 代入 Superficially, Ioke s assignment model is quite simple. But there exists some subtleties too. One of the main reasons for this is that assigning a cell that doesn t exist will create that cell. Where it gets created is different based on what kind of context the assignment happens in. The main difference here is between a method activation context, or a lexical block context. Ioke also supports assignment of places, which makes assigning much more flexible. A third feature of Ioke assignment is that it will check for the existence of an assignment method before assigning a specific name. This chapter will make all these things clear, and show some examples. Let s start with a small example of simple assignment foo=Originmimicfoo x=42foo y=13foo x+=2 The first line creates a new Origin mimic, and then assigns that to the name foo. Since this code executes at the top level, foo will be a new cell created in Ground. The second line creates a new cell called x inside the foo object. It gets assigned the value 42. The third line creates a y cell, and the fourth line sends the += message, which will first call +, and then assign using =. So at the end of this program, foo will contain two cells x with value 44, and y with value 13. As mentioned above, cells get created the first time they are assigned to. If you need to create a cell in a specific object, just namespace it. For example, if you want to make sure that you create a cell in Ground, just do Ground foo = 42 . Inside of a method, the situation is exactly the same. If you assign something, it will be assigned in the current context, which is the local activation context (meaning it s the place where local variables are available). There are two situations where this doesn t hold true. The first one is within the special method do . This method will take any code as argument and execute that with the receiver of the do message as the ground/context of the code inside it. That means do is a good way to create new cells inside an object. This is a bit academic, so lets take a look at an example Foo=OriginmimicFoox=method(;; this creates a local variable in the method activationfoo=42)Foo=OriginmimicFoodo(;; this creates the cell foo inside of Foofoo=42) Here you can see a method defined called x. This method will just create a new local cell, which means calling the method will not make any difference on its receiver at all. The call to do in contrast will immediately execute the code inside it, and this code will create the cell foo inside of Foo . The second exception to the general rule is when executing inside of a lexical context. A lexical context is basically established inside of a block, but can also be created transparently when sending code to a method. A lexical block will try to not create new cells. When you assign a cell without a specific place to assign it, a lexical block will first see if there is any cell with that name further out, and if so it will make the assignment there instead. Only when no such cell exists, a new cell will be created in the lexical context. This code shows this in action x=42fn(x=43. y=42)call x;; = 43y;; = Condition Error NoSuchCell The fn message creates a new lexical block. The chapter oncodewill talk more about this. But as you can see, this block assigns 43 to the cell x , and 42 to the cell y . But since the cell y doesn t exist, it will only be created inside the lexical context, while x exists outside, and will be assigned a new value instead. The basic idea is that code like this should behave like you expect it to behave. The canonical form of assignment is a bit different from the way you usually write code in Ioke. The section on the syntax of assignments talked a bit about this. Specifically, something like foo = 42 will get translated into =(foo, 42) . That also means that assignment is just a regular method call, and can be overridden or removed just like any other method. That is exactly how both lexical context, and local method context make it possible to have different logic here. This is true for all assignment operators. All assignment operators take as their first argument the place to assign to. This place will be unevaluated. Only the second argument to an assignment will be evaluated. In most cases, a place is the same thing as a cell name, but it doesn t have to be. Let s look at the case of assigning a cell with a strange name. Say we want to assign the cell with the no name. We can do it like this cell( )=42 What happens here is a bit subtle. Since the left hand side of the assignment takes arguments, the = method figures out that the assignment is not to a simple cell name, but to a place. The parsing step will change cell( ) = 42 into =(cell( ), 42) . Notice here that the argument comes along into the specification of the place. When this happens, the assignment operator will not try to create or assign a cell - instead it will in this case call the method cell=. So cell( ) = 42 will ultimately end up being the same as cell=( , 42) . This way of transforming the name will work the same for all cases, so you can have as many arguments as you want to the place on the left hand side. The equals sign will be added to the method name, and a message will be sent to that instead. This makes assignment of places highly flexible, and the only thing you need to do is implement methods with the right names. This feature is used extensively in Lists and Dicts to make it easy to assign to specific indexes. So, say we have a list called x. Then this code x[13] = 42 will be transformed into x =([](13), 42) which will in turn be transformed into x []=(13, 42) . Ioke lists also has an at= method, so you can do x at(13) = 42 which will call at=, of course. The second transformation that might happen is that if you try to assign a cell that has an assigner, you will call that assigner instead of actually assigning a cell. So, for example, if you do foo documentation = 42 , this will not actually create or assign the cell documentation . Instead it will find that Base has a cell called documentation= , and instead send that message. So the prior code would actually be equivalent to foo documentation=(42) . All of these assignment processes together make it really easy to take control over assignment, while still making it very obvious and natural in most cases. Let Sometimes you really need to change the value of something temporarily, but then make sure that the value gets set back to the original value afterwards. Other situations often arise when you want to have a new name bound to something, but maybe not for a complete method. This might be really useful to create closures, and also to create localized helper methods. For example, the Ioke implementations for Enumerable use a helper syntax macro. This macro is bound temporarily, using a let form. This ensures that the syntax doesn t stay around and pollute the namespace. A let in Ioke can do two different things, that on the surface look mostly the same but are really very different operations. The first one is to introduce new lexical bindings, and the second is to do a dynamic rebind of a specific place. The easiest way of thinking about it is that the lexical binding introduces a local change or addition to the available names you re currently using, while a dynamic rebinding will change the global state temporarily, and then set it back. This sounds really academic, so let us go for some examples. We begin with lexical bindings. ;; put everything in a method to show explicit scopefoo=method(x, y, x println; = argument value of xlet(x,14, x println; = 14)x println; = argument value of xy println; = argument value of yy=13y println; = 13let(y,14, y println; = 14)y println; = 13z println; will signal conditionlet(z,42, z println; = 42)z println; will signal condition) Here a new method is created that has two arguments, x and y. The first let-expression will create a new scope where a binding from x to 14 is established. This binding is valid until the end of the let-form (but it can be changed, doing an assignment will set the value to something else, but only until the end of the let form). The same thing is true with y. We can change the value of y outside of the let form. That changes the actual argument variable. But a let form that binds y will only have it active for a limited time. Finally, a let form can also create totally new variables, as when creating z. I didn t show any example of it, but the first part of a let-name can be any kind of place, not just a simple name. Anything you can use with =, can be used as a name for let. So you could do something like let(cell( ), 42, nil) if you wanted to. OK, so that s lexical binding. What about dynamic rebinding? The main difference in a dynamic binding is that the scope you work in is something that is referencable from other scopes. In most cases this will be global places, but not necessarily. You can also rebind cells inside of other objects with the dynamic binding feature. bar=method(let(Originfoo,method( haha println), x fooOriginfoo[1,2,3]foo)let(Textsomething,42, abc something println; = 42) abc something println; will signal conditionlet(Textinspect, HAHA , foo bar qux inspect println; = HAHA ) foo bar qux inspect println; = #[ foo bar qux ]let(TextasRational,method(42),(3+ haha )println; = 45)) This example actually changes things quite a lot. The first and second examples introduce new cells into existing places, uses them and then doesn t do anything. The third example actually overrides an existing cell in Text - inspect - and then uses it inside of the let code. Finally, after the let block is over, we see that the original method is back. The fourth example shows that our changes with let actually are global. There is no asRational on Text, but we add it temporarily and can then use it in arithmetic with numbers. This is once again a temporary change that will disappear afterwards. Ioke s let-form is incredibly powerful, and it allows very nice temporal and localized changes. Of course, it s a power that can be abused, but it gives lots of interesting possibilities for expression. Control flow 制御フロー Ioke has some standard control flow operators, like most other languages. In Ioke, all of these are regular method calls though, and they can usually be implemented in terms of Ioke. This chapter will chiefly talk about comparisons, conditionals and iteration constructs. Comparison 比較 There are several comparison operators in Ioke, but the most important is called the spaceship operator. This operator is = . It takes one argument and returns -1, 0 or 1 depending on the ordering of the receiver and the argument. If the two objects can t be compared, it returns nil. If you implement this operator and mixin Mixins Comparing, you get the operators ==, !=, , =, and = implemented in terms of the spaceship operator. There are two other common operators in Ioke. The first =~, which can also be called the match operator. It s only implemented for Regexp right now. The === operator also exists, but isn t implemented for most objects. This operator doesn t do much right now, but is planned to be the basis of a Ruby-like case-statement further down the line. The contract of comparison operators is that they should return a true value (not necessarily the true) if the comparison is true, and otherwise return either false or nil. The contract for === should be matching or not matching. It is among other things used in Ranges to see if something is included in that range or not. iik 1+2 4+ trueiik 3+2 4+ falseiik foo = fop + -1 Conditionals 条件分岐 Ioke has two different ways of doing conditionals. The first one is the default, and is also the traditional conditional from other languages. The second version looks more like Smalltalk conditionals. As with everything else, these conditionals are all methods, and can be overridden and changed if need be. They can also be polymorphic. The default conditionals are called if and unless . They both take an initial evaluated argument that is used to check which branch should be taken. The if method will execute it s second argument if the first argument is true, and the third argument if the first argument is false. The unless method does the inverse -- executing the second argument if the first argument is false, and the third argument if the first argument is true. One or both of the branches can be left out from the statement. If no else-part is around and the conditional part evaluates to a false value, that false value will be returned. A few examples are in order if(42 43, wow, math comparison works println, we have some serious trouble println)if(42 43, wow, math comparison works , we have some serious trouble )printlnunless(42 43, convoluted math println) It is good style to not use unless with an else branch. It generally tends to not be so readable that way. Remember that if and unless return their values, which means they are expressions like everything else. The middle example show that you can just call println on the result of the if-call, instead of doing it twice inside. This is also good style. Assigning the result of an if-call is likewise not a problem. In some languages you see a pattern such as if(foo = someExpensiveMethodCall(), foo println) , where a variable is assigned in the condition evaluation so the value doesn t have to be evaluated twice. This works in Ioke too, but there is a more idiomatic way of doing it. Both if and unless establish a lexical context, where a variable called it is available. This variable will be bound to the result of the conditional. So the above idiom could instead be written if(someExpensiveMethodCall(), it println) . This is the preferred way of handling regular expression matching. The Smalltalk inspired way of doing conditionals rest on the methods called ifTrue and ifFalse. Both of these methods are only defined on true and false, which means they are not as general as the if and unless statements. They can also be chained together, so you can write (42 43)ifTrue( wowsie! println)ifFalse( oh noes println) As should be obvious from these examples, these conditionals can not return any value. They must only rely on side effects to achieve anything. Ioke also supports the expected short circuiting boolean evaluators. They are implemented as regular methods and are available on all objects. All of the expected combinators are available, including and , , or , || , xor , nor and nand . cond Ioke doesn t have any else-if expression, which means that when you want to do several nested checks, you end up with lots of indentation. Cond is a macro that expands to that code. The code using cond will not have more indentation, which means it might be easier to read. A cond has one or more conditional expressions followed by an action part to execute if that condition is true. As soon as a condition has evaluated to true cond will not evaluate any more conditions or actions. If no conditions evaluate to true, nil will be returned, unless there is an action part following the last action-part. In other terms, if the cond-expression has an odd number of arguments, the last argument is the default case to execute if nothing else matches. Some examples of cond cond(x==1, one println, x==-1, minus one println, x 0, negative println, x 0, positive println, zero println) As you can see, it becomes quite clear what happens here. Keep in mind that cond is an expression, just like anything else in Ioke, and will return the last value evaluated. case A thing that you very often want to do is to check one value against several different conditions. The case expression allows this to be done succinctly. The core to the case-expression is the === method, that is used for matching. The expression takes one value, then one or more conditionals followed by actions, and then an optional default part. Once something matches, no more conditionals will be executed. The conditional part should not be a complete conditional statement. Instead it should return something that implements a fitting ===. So, a small example follows case(value,Text, it is a text! println, 1..10, it is a low number println, blurg, it is the symbol blurg println,fn(c,(c+2)==10), it is 8 println, we don t know it! println) The above example shows several different things you can match against, including a lexical block. The implementation of === for a lexical block will call the block with the value and then return true or false depending on the truth-value of the result of the call to the block. A thing that can be inconvenient in some languages is to do combinations of several of these. Say you want to check that something is a Text and matches a regular expression, or it is either 5..10 or 15..20. In most cases you will end up having to write several conditional parts for at least one of those two. But Ioke allows you to use combiners in the conditional part of a case expression. These combiners will be rewritten before executed, so a combiner called else will actually use the method case else , that in turn returns an object that responds correctly to ===. The end result is that using combiners read really well, and you can define your own by prefixing the name with case . There are several standard ones. Using a few of them looks like this case(value,and(Text,#/o+/), it s a text with several oos println,or(5..10, 15..20), numberific println, else, oh no! println) Combiners can be combined with each other and nested, so you could do and(foo, or(1, 2, 3), not(x)) if you want. The available combiners are these and Returns a matcher that returns true if all the arguments return true when calling ===. This is short circuiting. or Returns a matcher that returns true if any of the arguments return true when calling ===. This is short circuiting. not Takes one argument and returns the false if calling === on the argument returns true, and the other way around. nand The nand operation applied to === combiners. nor The nor operation applied to === combiners. xor The xor operation applied to === combiners. else otherwise Returns a matcher that always returns true. This is useful to make the default argument read better. Iteration 繰り返し Ioke supports most of the expected control flow operations for iteration. The one thing that is missing is the for-loop. Since the for-loop encourages low level stepping, and can be replaced by other kinds of operations, I don t see any reason in having it in Ioke. In fact, the for-statement in Ruby is generally considered bad form too. And if someone really wants a for-loop it s really easy to implement. For now I m reserving the name if I would like to add comprehensions at some point. loop For creating infinte loops, the loop -method is the thing. It will just take a piece of code and execute it over and over again until some non-local flow control rips the execution up. Using it is as simple as calling it loop( hello println)x=0loop(if(x 10,break)x++) The first example will loop forever, printing hello over and over again. The second example will increment a variable until it s larger then 10, and then it will break out of the loop. while The Ioke while loop works exactly like while-loops in other languages. It takes one argument that is a condition to reevaluate on each iteration, and another argument that is the code to evaluate each iteration. The result of the while-loop is the result of the last executed expression in the body. x=0while(x 10, x println x++) until The until-loop works the same as the while-loop, except it expects its condition argument to evaluate to false. It will stop iterating when the conditional is true for the first time. x=0until(x==10, x println x++) times A very common need is to iterate something a certain number of times. The Number Integer kind defines a method called times that does exactly this. It s got two forms - one with one argument and one with two arguments. With one argument, it will just run the argument code the specified number of times, and with two arguments the first argument should be the name of a cell to assign the current iteration value to and the second is the code to execute. 3times( hello println)4times(n, #{n} wow println) The first example will print hello three times, while the second example will count up from 0 to 3, printing the number followed by wow . each For most iteration needs, you want to traverse a collection in some way. The standard way of doing this is with the each -method. It s defined on all central collection classes and is also the basis of the contract for Mixins Enumerable. The contract for each has three different forms, and all should be implemented if you decide to implement the each method. The each method should -- as the name implies -- do something for each entry in the collection it belongs to. So calling each on a set would do something with each entry, etc. Exactly what that is depends on how many arguments are given to each . If one argument is given, it should be a message chain. This message chain will be applied to each element. [ one, two, three]each(inspect println);; the above would execute oneinspect println twoinspect println threeinspect println Another way of saying it is that the message chain will be executed using each element of the collection as receiver, in turn. The return value will be thrown away in this case, so to achieve anything, the code need to mutate data somewhere. The second -- and most common -- form, takes two arguments. The first argument should be the name of a cell to assign each element to, and the second argument should be the code to execute. Under the covers, this form will establish a new lexical context for the code to run in. As with the first version, each return value will be trown away. [2,4,6]each(x,(x*x)println) Here, the name x will be used as the name of each element of the list in turn, while executing the code. The final form of each takes three arguments, where the first is the name of a cell to assign the current index, and the other two arguments are the same as the above. [2,4,6]each(i, x, #{i} #{(x*x)} println) The above code would print 0 41 162 36 break, continue When executing loops it is sometimes important to be able to interrupt execution prematurely. In this cases the break and continue methods allow this for loop , while and until . Both break and continue work lexically, so if you send code to another method that uses these methods, they will generally jump out of a lexically visible loop, just like expected. The break method takes an optional value to return. If no value is provided it will default to nil. When breaking out of a loop, that loop will return the value given to break. The continue method will not break out of the execution, but will instead jump to the beginning and reevaluate the condition once again. while(true,break(42)) This code will immediately return 42 from the while-loop, even though it should have iterated forever. i=0while(i 10, i println if(i==5, i=7continue)i++) This code uses continue to jump over a specific number, so it will only print 0 to 5, and 7 to 9. Comprehensions 包含 Ioke s Enumerable mimic makes it really easy to use higher order operations to transform and work with collections of data. But in some cases the code for doing that might not be as clear as it could be. Comprehensions allow a list, set or dict to be created based on a more abstract definition of what should be done. The specific parts of a comprehension are generators, filters and the mapping. The generators are what data to work on, the filters chooses more specifically among the generated data, and the mapping decides what the output should look like. The following example does three nested iterations and returns all combinations where the product of the number is larger than 100 for(x -1..20, y -1..20, z -1..20, val=x*y*z, val 100,[x, y, z, val]) This code neatly shows all things you can do in a comprehension. The final argument will always be the output mapping, which in this case is a list of the three variables, and their product. The generator parts is first a name, the - operator followed by an expression that is Enumerable. You can also see that one of the expressions is an assignment, that can be used later. Finally, there is a conditional that limits what the output will be. The more or less equivalent expression using Enumerable methods would be 1..20 flatMap(x, 1..20 flatMap(y, 1..20 filter(z, x*y*z 100) map([x,y,z,x*y*z]))). In my eyes, the for-comprehension is much more readable. There are two variations on this. The first one is when you want the output to be a Set of things instead of a List. The code is exactly the same, except instead of using for, you use for set. There is also a for dict version, for more esoteric usages. Code コード Many of the things you do in Ioke will directly manipulate code. Since the messages that make up code is really easy to get hold of, this manipulation comes easy too. Ioke takes the Lisp philosophy of code is data to heart. The basic unit of a piece of code is a Message. A Message has a name, a next and prev pointer, and any number of arguments. When you manipulate a message, the argument list will contain messages too - and if the next or prev pointers are not nil, they will point to other messages. It serves well to remember that except for the message itself, all code will be evaluated in the context of a receiver and a ground. The ground is necessary because arguments to be evaluated need to be run in some specific context, even though the current receiver is not the same as the ground. The current types of code can be divided into three different categories. These are methods, macros and blocks. Native methods are all of the kind JavaMethod, but can have any kind of semantics - including semantics that look like macros. Most native methods do have the same semantics as regular methods, however. Methods メソッド A method in Ioke is executable code that is activatable. A method can take arguments of several different types. The arguments to a method will always be evaluated before the code in the method starts to execute. An Ioke method is defined using the method method. All Ioke methods have the kind DefaultMethod. This leaves the room open to define other kinds of methods, if need be. DefaultMethod s could be implemented using macros, but at this point they aren t. A DefaultMethod can have a name - and will get a name the first time it is assigned to a cell. It is really easy to define and use a simple method. The easiest case is to define a method that is empty. This method will just return nil m=method()m;; call the method Since methods are activatable, when you name a cell that contains a method, that method will be invoked. To stop that behavior, use the cell method. The definition of a method can take several different pieces. These are a documentation string, definitions of positional required arguments, definitions of positional optional arguments, definitions of keyword arguments, definition of a rest argument, definition of a keyword rest argument and the actual code of the method. Let s take these one by one. First, if the the first element of a call to method is a literal text, and there is at least one more argument in the definition, then that text will be the documentation text for the method ;; a method that returns foo m=method( foo );; a method that returns nil, but;; has the documentation text foo m=method( foo ,nil) A method can take any number of required positional arguments. These will be checked when a method is called, and if not enough -- or too many -- arguments are provided, an error will be signalled. m=method(x, x println)m=method(x, y, z, x*y+z) The first method takes one argument and prints that argument. The second method takes three arguments and return the product of the two first added to the third. A method can also have optional positional arguments. In that case the optional arguments must follow the required arguments. Optional arguments need to have a default value -- in fact, that is how you distinguish them from required arguments. The arity of method calls will still be checked, but using minimum and maximum values instead. The default value for an argument should be code that can be executed in the context of the running method, so a default value can refer to earlier positional arguments. A default value can also do quite complex things, if need be, although it s not really recommended. ;; takes zero or one argumentsm=method(x42, x println);; takes one to three argumentsm=method(x, y42, z25, x*y+z) The syntax for optional arguments is to just write a space after the name of the argument, and then write the code to generate the default value after it. A method can also have keyword arguments. Keyword arguments are checked, just like regular arguments, and you can t generally give keyword arguments to a method not expecting it. Nor can you give unexpected keyword arguments to a method that takes other keywords. Keyword arguments can never be required. They can have default values, which will default to nil if not provided. They can be defined anywhere among the arguments -- the only reason to reorder them is that default values of other optional arguments can use prior defined keyword arguments. A keyword argument is defined just like a regular argument, except that it ends in a colon. m=method(foo ,bar 42, foo println bar println) Just as with regular optional arguments, you supply the default value of the keyword argument after a space. The cells for the keyword arguments will be the same as their names, without the ending colon. The above code would print nil and 42 if no arguments were specified. It s important to remember that keyword arguments and positional arguments do not interact -- except for when calculating default values. When assigning values it s always possible to see what is positional and what is a keyword argument. Ioke methods can collect positional arguments into a list. This allow methods to take variable number of arguments. The rule is that all other positional arguments are first calculated, and the remaining positional arguments will be added to the rest argument. If no positional arguments are available, the rest argument will be empty. A rest argument is defined by preceding it with a plus sign in the argument definition. For clarity a rest argument should be defined last in the list, although it doesn t exactly matter anyway. m=method(+rest, rest println)m=method(x, y42,+rest, rest println) The above code defines one method that only takes one rest argument. That means the method can take any number of arguments and all of them will be collected into a list. The second method takes one required argument, one optional argument and any number of extra arguments. So if four arguments are given, the rest argument will contain two. The final type of argument is keyword rest arguments. Just like positional rest arguments, a keyword rest argument can collect all keywords given to a method, no matter what. If a keyword rest argument is used, no conditions will be signalled if an unknown keyword is given to a method. If other keywords are defined, these keywords will not show up in the keyword rest argument. The keyword rest argument is defined by preceding the name with a + sigil, and the keyword rest argument will be a Dict instead of a list. The keys will be symbols but without the ending colon. m=method(+ krest,krest println)m=method(x, y ,+rest,+ krest,[x, y, rest, krest]) The above code first creates a method that can take any number of keyword arguments but nothing else. The second method takes one required positional argument, one keyword argument, rest arguments and keyword rest arguments, and returns a new list containing all the arguments given to it. The final argument to the method method should always be the code to execute. This code will be executed in the context of a receiver, that is the object the method is activated on. A method execution also happens in the context of the method activation context, where local variables are stored. This activation context contain some predefined variables that can be used. These are self , @ , currentMessage and surroundingContext . Both self and @ refer to the receiver of the method call. currentMessage returns the message that initiated the activation of the method, and surroundingContext returns the object that represents the context where this method was called from. Both self and @ can be used to specify that something should be assigned to the receiver, for example. createNewCell=method(@foo=42) The method create above will create assign the value 42 to the cell foo on the object the method was called on. When calling a method, you specify positional arguments separated with commas. You can provide keyword arguments in any order, in any place inside the braces ;; the method foo takes any kind of argumentfoo foo()foo(1,2,3)foo(blarg 42,2,3,4)foo(quux 42*2) To give a keyword argument, you just write it exactly like you define keyword arugments - a name followed by a colon. Sometimes it can be useful to be able to take a list of values and give them as positional arguments. The same can be useful to do with a dict of names. You can do that using splatting. This is done by preceding a list or a dict with an asterisk. This will result in the method getting the values inside of it as if the arguments were given directly. You can splat several things to the same invocation. dc={foo 42, bar 13}ls=[1,2,3,4]ls2=[42,43,44]foo(*dc);; the same as foo(foo 42, bar 13)foo(*ls);; the same as foo(1,2,3,4)foo(*ls2,111,*dc,*ls);; the same as foo(42,43,44,111, foo 42, bar 13,1,2,3,4) If you try to splat something that can t be splatted, a condition will be signalled. Macros マクロ The main difference between a macro and a method in Ioke is that the arguments to a macro are not evaluated before they are sent to the macro. That means you have to use macros to send raw message chains in an invocation. In most languages, this kind of feature is generally called call-by-name. When a macro gets called, it will get access to a cell called call which is a mimic of the kind Call. This gives access to information about the call and makes it possible to evaluate the code sent as arguments, check how many arguments are supplied, and so on. A macro is created using the macro cell on DefaultBehavior. This will return a mimic of DefaultMacro. Since macros can t define arguments, it s a bit easier to describe than methods, but the things that can be done with macros are also a bit more interesting than what can be achieved with methods. One important thing to keep in mind is that most macros can not receive splatted arguments. In most cases keyword arguments aren t available either - but they could be faked if needed. Macros should generally be used to implement control structures and things that need to manipulate code in different ways. Just like a method, a macro gets evaluated on a specific receiver. It also gets the same kind of method activation context, but the contents of it is a bit different. Specifically, the context for a macro contains cells named self , @ , currentMessage , surroundingContext and call . It s the call cell that is most important. It is a mimic of Call, and Call defines several important methods for manipulating the call environment. These are arguments This method returns a list containing the unevaluated arguments given to this message. Any kind of manipulation can be done with these arguments. ground Returns the ground in which the call was initiated. This is necessary to evaluate arguments in their own environment. message The currently executing message. This is the same as the currentMessage cell in the macro activation context. evaluatedArguments Returns a list containing all arguments, evaluated according to the regular rules (but not handling splatting or keywords). resendToMethod Allows a specific message to be resent to another method, without manually copying lots of information. These methods are a bit hard to understand, so I ll take some examples from the implementation of Ioke, and show how macros are used here. MixinsEnumerablemap=macro( takes one or two arguments. if one argument is given, it will be evaluated as a message chain on each element in the enumerable, and then the result will be collected in a new List. if two arguments are given, the first one should be an unevaluated argument name, which will be bound inside the scope of executing the second piece of code. it s important to notice that the one argument form will establish no context, while the two argument form establishes a new lexical closure. , len=call arguments length result=list()if(len==1, code=call arguments firstselfeach(n, result code evaluateOn(call ground, cell( n))),code=LexicalBlockcreateFrom(call arguments, call ground)selfeach(n, result code call(cell( n))))result) The code above implements map, one of the methods from Enumerable. The map method allows one collection to be mapped in a predefined way into something else. It can take either one or two arguments. If one argument is given, that is a message chain to apply, and then collect the results. If two arguments are given, the first is the argument name to use, and the second is the code to execute for each entry. The first step is to figure out how many arguments have been given. This is done by checking the length of the call arguments cell. If we have a length of one, we know that the first argument is a piece of code to apply, so we assign that argument to a cell called code . Now, code will be a mimic of Message, and Message has a method called evaluateOn , that can be used to fully evaluate a message chain. And that s exactly what we do for each element in the collection we are in. The result of evaluateOn is added to the result list. We use call ground to get the correct ground for the code to be evaluated in. If we get two arguments, it s possible to take a shortcut and generate a lexical block from those arguments, and then use that. So we call LexicalBlock createFrom and send in the arguments and the ground, and then call that piece of code once for each element in the collection. It is a bit tricky to figure out how macros work. I recommend looking at the implementations of some of the core Ioke methods/macros, since these use much of the functionality. Blocks ブロック A lexical block allows the execution of a piece of code in the lexical context of some other code, instead of in a dynamic object scope. A lexical block does not have a receiver. Instead, it just establishes a new lexical context, and executes the code in that. The exact effect that has on assignments has beendescribedearlier. A lexical block can be created using either the fn or the fnx methods of DefaultBehavior. The main difference between the two is that a block created with fnx will be activatable, while something created with fn will not. Lexical blocks handle arguments exactly the same way as methods, so a lexical block can take optional arguments, keyword arguments, rest arguments and so on. Both fn and fnx also take optional documentation text. A block created with the fn method can be invoked using the call method of the kindLexicalBlock. x=fn(z, z println)x call(42) If a block created with the fn method takes one or more explicit parameters it can also be activated like a regular method. The reason for this is shown in the code snippet below. Here the result of invoking the block referred to by x is passed to y (which may be a regular method or even another block). If x would be fully non-activatable, x would be passed to y as is with the argument thrown away. In other words, that would be dead code. However, you can still refer to the block as x without an invocation to happen. x=fn(z, z+42)y(x(100));; activates the block with argument 100 and passes the result to yx;; refers to the block without activating it A block created with the fnx method is activatable per se and thus can be activated like a regular method. The default is to use fn to create inactive blocks though, since blocks are generally used to pass pieces of code around. y=fnx(z, z println)y(42) A lexical block is a regular kind of object that can be assigned to any cell, just like other objects. Lexical blocks mimic LexicalBlock, and blocks don t have names. In contrast to methods and macros, no extra cells will be added to the activation context for a lexical block. Lecros レクロ A macro works exactly like a method, in that it always has a receiver, and that receiver is available inside the macro as self and @ . In some circumstances it can be really useful to have a macro that behaves like a lexical block instead - being lexical so it can use cells defined outside of the definition of the macro. These macros won t have access to self or @ , since they don t have a receiver in that way. Where such a macro is called is only based on namespacing. Ioke supports these kind of macros. They are all mimics of the kind LexicalMacro, and they are created using the method lecro . A LexicalMacro is activatable by default, but a non-activatable lecro can be created using lecrox. The lecro method takes the same arguments as macro , and the only real difference is the way it handles outside cells and the receiver value. A lecro also has a cell called outerScope that can be used if you need to explicitly access something in the outer name space - such as call. Syntax 構文 Ioke supports loads of stuff with the standardmacro, but sometimes these are a bit too low level for commonly used operations. Syntax is one of those cases you can achieve the same goals with macros, but you don t really want to. Many features in Ioke S are implemented using syntax. You can define syntax using thesyntaxmethod. This returns a mimic ofDefaultSyntax. You can use the same kind of cells in a syntax as you can in a macro. What is different with syntax is that syntax can only return one of two things. The first isnil, and the second is a message chain. A syntax will only be executed once at every point in the message chains, because after a syntax executes the first time, it will replace itself with the result of that evaluation. If that evaluation returnsnil, syntax will just remove itself from the message chain. You can use this for many things, but one of the more useful things you can do is translate a high level declarative definition of something into a low level executable version. That is exactly how for comprehensions are implemented. Syntactic macros are fairly advanced, and take some time to grok. They are incredibly useful though, and they are used all over the standard library to achieve all manner of interesting things. Take a look there and things should hopefully become clearer. It s also a must to read the section on message chain manipulation and quoting in this guide to make syntax macros readable. Destructuring 構造の分解 A common problem with macros is that you want to take several different combinations of arguments, and do different things depending on how many you get. Say you might want to take one code argument, but also two optional arguments that should be evaluated. All of that code turns out to be highly repetetive, so Ioke contains a collection of syntax macros that make it easier to write these things. These are collectively called destructuring syntax. Let us say we have a macro that can be called with any of three types of argument list [code], [evaluatedArgument, code], or [evaluatedArgument, code, evaluatedArgument]. The stuff that should happen is totally different for each of these cases. With a regular macro the code would look something like this foo=macro(len=call arguments length case(len,1, code=call arguments[0]; do something with the code,2, arg1=call argAt(0)code=call arguments[1]; do something with the code and arg,3, arg1=call argAt(0)code=call arguments[1]arg2=call argAt(2); do something with the code and args)) As you can see it s really a lot of code to see what happens here, and it is very imperative in style. But, if I instead use dmacro - which is the destructuring version of macro - it looks like this foo=dmacro([code]; do something with the code,[ arg1, code]; do something with the code and arg,[ arg1, code, arg2]; do something with the code and args) dmacro will automatically check the length and extract the different arguments. The right arrow before the names of arg1 and arg2 marks that these should be evaluated. And what is more, dmacro will generate code that also generates a good condition if no argument matching works out. If you give zero arguments to the first version, it will fail silently. The dmacro will complain immediately. The dmacro destructuring syntax actually supports several more ways of ripping arguments apart. You can find this information in the doks for dmacro. Also, there are equivalent versions of dmacro for lecro, lecrox and syntax, called dlecro, dlecrox and dsyntax. They do the same thing, except they act like lecros or syntax instead. Message chains メッセージ鎖 In many cases a macro will take code that is not wrapped up inside of a method, macro or block. These pieces of code are called message chains, since their representation will be a raw Message mimic. The chains are quite flexible, since they can be taken apart, modified and put together again. They can also be unevaluated and used as data definitions of some kind. That s how the argument handling to methods are implemented, for example. Since the call to method can be seen as a regular call to a macro, the argument descriptions are actually just unevaluated message chains that are picked apart to tease out the argument names. The same technique is applicable in any macro usage. The term message chain fragment is also used to specifically mean a message chain that is meant to be put together with something and evaluated. Picture a daisy chain that gets added at the end of another chain and then executed. That s what happens if you execute something like[1, 2, 3] map(*2). In this case the call to*with the argument 2 will be a message chain fragment that will be put together with a new receiver before execution. To handle syntax correctly - but also to generally handle manipulation of message chains - it is important to know about the available methods to do this. I have added quite a lot of nice stuff that makes it easy to work with message chains. First, messages are actuallyEnumerable, so you can use anyEnumerablemethods on them. The enumeration always starts at the receiver. It will not proceed into arguments, just following the next-pointer. To create a new message or message chain, there are several helpful methods and operators. The first method is calledmessageand takes an evaluated name and returns a new message with that name.Message fromtakes one argument that will not be evaluated and returns a message chain corresponding to that argument.Message fromTextparses text and returns the message chain for it.Message wraptakes an evaluated argument and returns a message that will always return that value. As will be mentioned later, Message hasnext=andprev=methods that you can use to set the next and previous pointers. Message also hasappendArgumentandprependArgumentthat allow you to add new arguments to the message arguments. The most used versions for creating message chains are short cuts for the above. Let us begin with creation. Instead ofMessage fromyou can use . That is a single quote mark. The message after that will be unevaluated and returned as a message chain. If you use a `, a backtick, that is equivalent toMessage wrap. And then we have , that is two single quotes after each other. This message is generally called metaquote or quasiquote. It works the same as , except that it will find any place where ` is used and insert the value of evaluating the message after the ` and insert that into the current message chain. Finally, will replace a `` with a literal ` message. You can add new arguments to a message by using the operator. This operator returns the receiver. If you want to chain together a message chain, usingnext=andprev=is pretty tedious. You can instead use the - operator. This will chain together the left hand side and the right hand side messages, and return the right hand side message. I think it is time for some examples ; create a new message with name foox= foo; add two arguments to the foo messagearg= (bar quux)(x arg) baz; what we have done so far could be done with x= (foo(bar quux, baz))y= blurg; chain together x and yx- y; the above is equivalent toif(y prev, y prev next=nil)x next=y y prev=x val=42; insert the message chain in x (foo bar(`val)`x); the above will return the same as (foo bar(42)foo(bar quux, baz)) To understand these operators, you need to have a clear understanding of how the internals of message chains work. Once that clicks, these should be fairly straight forward to understand. Introspection and reflection 内部構造とリフレクション Ioke supports quite fancy introspection and reflection capabilities. In Ioke, reflection includes the ability to change data dynamically, as well as introspect on it. Since the message based structure of a program is available at runtime, most things can be changed dynamically. The internal structure of a program is also very easy to inspect. All objects in Ioke have some core methods that are used to look at them. Some come from Base, and some come from DefaultBehavior. The rest of the reflection and metaprogramming capabilities belong to the Message kind. kind Should be a text that gives the full name of the kind this object is closest mimic to. Except for nil, true and false, this will return a text that starts with a capital letter. Foo=OriginmimicFoomimickind printlnFooBar=OriginmimicFooBarmimickind println This code will first print Foo , and then print Foo Bar , since an object assigned to a cell with a capital initial letter will get a new kind value. kind? Takes one text argument and returns true if the object has that kind anywhere in its mimic chain. Foo = Origin mimic foo = Foo mimic foo kind?( foo );; false foo kind?( Foo );; true foo kind?( Text );; false foo kind?( Origin );; true foo kind?( Ground );; true foo kind?( DefaultBehavior );; true foo kind?( Base );; true As you can see in this example, kind? can return true for several different texts. notice When looking at objects, there are two ways to get information about them, notice and inspect. If you want a brief description of an object where it s important that the description doesn t take up much space, notice should be used. If an exhaustive description is needed, inspect should be used instead. For some objects these both return the same thing, but for Origin mimics, the difference is large. Foo=OriginmimicFoox= blarg Fooy=42Foonotice;; Foo_0x7CBDE6 The default notice for Origin mimics will combine the kind and the unique hex id for the object, and create a text of that. The notice method should be overridden to provide better information in most cases. inspect In contrast to notice, inspect is used to get exhaustive information. If a composite object is asked for its inspect, a quite large dump of information will often be shown. For a new object the output will be smaller, but usually still larger than the notice for it. Foo=OriginmimicFoox= blarg Fooy=42Fooinspect println This will print Foo_0x7CBDE6 kind = Foo x = blarg y =42 If another representation makes more sense for inspection, inspect should definitely be overridden by custom objects. uniqueHexId This method is used to return a text that contains a unique hex identity for an object. This text is guaranteed to be unique within a virtual machine for any object, and is the mechanism that inspect and notice uses. cellSummary Calling inspect on any Origin mimic will dispatch to cellSummary , which displays all the cell information about a specific object. cell The cell method can be used for two different things. The first one is to get access to a value without activating it, and the second is to get access to a cell based on a name that you don t know at the time you re writing the program. The cell method takes one argument that is the name of the cell to fetch. The fetching works the same as regular cell lookup, except that activation doesn t happen. This means that a condition will still be signalled if you try to get something that doesn t exist. x=42cell( x);; 42x=method()cell( x);; the method objectname= foocell(name);; the value of foo cell= Just as with cell , cell= can be used to set cells that you don t know the name of at the time of writing the program. As discussed in the chapter on assignment, cell= can also be used to set cells that can t be set in the regular way due to naming strangeness. cell? If you re not sure if a cell exists, using cell? is the way to find out. Give it a name and it returns true or false depending on if that cell exists. cellNames If you want to get the names of all the cells an object contains, you can get that with cellNames. By default, cellNames will only return the names of cells that belong to the receiver, but if an argument of true is sent to the call, the resulting list will contain the names of all cells of all mimics too. x=Originmimicx f=42x cellNames;; return [ f]x cellNames(true);; return a long list, including f cells Just like cellNames return the names of all the cells, the cells method will return a Dict of all the cells with their values. And just like cellNames, cells take an optional boolean argument on whether to include the cells of mimics too. x=Originmimicx f=42x cells;; return {f 42}x cells(true);; return a large dict, including f 42 mimics Returns a list of all direct mimics of the receiver. mimics? Takes one object as argument and returns true or false depending on if the argument is anywhere in the receiving objects mimic chain. message Takes one symbol argument and creates a new Message mimic with that argument as its name. Message code Returns a text that describes the code this message chain represents. It will hide some of the internal shuffling, but operators will be displayed using canonical form. Message formattedCode Returns a text that is formatted and indented in a canonical way. This method is used to generate the documentation code for DokGen, among other things. Message evalArgAt Takes the index of the argument to evaluate, and the ground to evaluate it on - returns the result of evaluating the argument. Message fromText Takes one text argument that should contain Ioke code, and returns the parsed message chain from that code, without evaluating it. Message doText Takes one text argument that should contain Ioke code, and returns the result of evaluating that code in the current context. Message filename Returns the filename where the receiving message was defined. Message line Returns the line number where the receiving message was defined. Message position Returns the position in the line where the receiving message was defined. Message name Returns the name of the message. The name of the message is what you generally talk about when saying you send a message. It can also be called the selector in other languages. Message name= Update the message with a new name. From this point on the message will only have that name, so doing this on a message that is part of an existing message chain will change the behavior of that code msg=MessagefromText( 2 + 1 )msg next name= - msg code;; 2 -(1) Message prev Returns the prev pointer of this message, or nil if no prev pointer exists. Message prev= Sets the prev pointer of a message. The new value should be either nil or another message. Message next Returns the next pointer of this message, or nil if no next pointer exists. Message next= Sets the next pointer of a message. The new value should be either nil or another message. Message sendTo Sends a message to an object. It s important to realize that sendTo will not evaluate the whole message chain -- it will only send one message with arguments to an object. Message keyword? Returns true if this message is a keyword message, and false otherwise. There are many more methods that can be used to do interesting introspection and reflection in Ioke. The reference documentation includes them all. Most of the interesting stuff can be found on the Message kind. send In many cases you want to activate something activatable in a cell, with a specific receiver. You can do this using send. You can send messages to most objects. Send takes one argument that should evaluate to the name of the message to send, and then sends along all other arguments given to send to the new message. These arguments will remain unevaluated, and will be evaluated at the leisure of the final method activated. Aspects アスペクト In many circumstances you might want to do several different things in a specific method. That generally goes against good software engineering, that says every piece of code should only have one responsibility. Aspect oriented programming tackles this by allowing you to slice code along a different dimension compared to the regular object oriented paradigm. Ioke has a small version of this, that allow you to add advice to cells. This advice can be before, after or around. All of them will get access to the arguments given in the original message, but after-advice also gets access to the value returned from the main cell. Finally, around-advice also gets the responsibility to invoke the original cell, so an around-advice could choose to not invoke it at all, or it could invoke it with different arguments, or maybe invoke it several times. Ioke currently only allows you to add or remove advice. To be able to remove advice, you need to name it when adding it. Unnamed advice can not be removed. Advice can be wrapped. It will be applied in an outside-in approach, where the most recently added advice will execute first. The return value of before and after advice doesn t matter, but the return value of around-advice will be interpreted as the new return value of the message send. To manipulate advice in Ioke, you need to describe what to manipulate. This description will return a Pointcut, that can then be used to inject advice at that point. Pointcuts can be defined in several ways. The easiest is to define it in terms of a cell name. Using this approach is the only way to define advice for non-existent cells. To create a Pointcut, call before, after or around on the receiver where the Pointcut should belong. The arguments specify what should be matched by the pointcut. You can see some examples of pointcuts here ; matches cells foo and barTextbefore( foo, bar)X=Originmimic; will not match anythingX around(matching anyFromSelf)X foo=123; will now match fooX around(matching anyFromSelf); any cell name matching the regexpX after(matching #/foo/); matches any at all, except fooX before(matching any,except foo); matches any at all, except anything that matches fooX before(matching any,except #/foo/); use a block for matchingX around(matching fn(x, x== blurg)); use a list to provide alternativesX before(matching [#/foo/,#/bar/]) As you can see from these examples, the pointcuts can be fairly advanced and specific in what they match. The option to send in a block makes it possible to check any property while matching. OK, once you have a Pointcut, there are three different methods you can call. These are , add, and remove!. The first one adds an unnamed advice, the second adds a named advice and the third one removes a named advice. Advice is any object that can be activated or called, so a method, a block, a macro or a syntax is fine. It s time to see what it looks like to add advice. Before-advice is the easiest kind. The important thing to remember is that the code will get the same arguments as the original call, which means it will also signal an error if the arguments doesn t match. X before( foo) method(x, got #{x} println)X before(matching anyFromSelf) macro( called #{call message name} println) This code doesn t do anything strange at all. Next up we have after-advice. The only difference here is that after-advice automatically gets a cell that is set to adviceResult, that can be used inside the method. X after( foo) method(+args, foo resulted in #{aspectResult} println) Remember that the result value of before and after advice doesn t count. It is thrown away. But these methods can still affect things by side effects. They can also be used for validation. A condition signalled inside of an advice would have the same effect as if done in the method itself - namely interrupting the flow of control. The final advice is around advice. These are different in two ways. First, they get access to a cell called aspectCall, which can be used to invoke the real cell (and the next chain of advice, of course). The second difference is that the result of the around advice will be the return value from the cell. So, you can imagine the around-advice executing instead of the original code. If you forget to invoke it, the original cell won t be invoked at all. X around( non_existant) method(42)X around( foo) macro(arg1, arg2, before println res=aspectResult(arg2, arg1) got #{res} println42) The first piece of code show that you can actually use an around advice around something that doesn t exist. But if you do call aspectCall inside of it, that will generate a NoSuchCell condition, of course. In the second example we first log some information, then invoke the original code with switched argument order, saves away the result, prints the result, and finally returns 42. There you can see most of the things that can be done inside of an around macro. The aspect system in Ioke is implemented in Ioke itself, and is fairly small at the moment. The guiding principle behind it is that it shouldn t have an impact on code that doesn t use it. It is a highly useful feature that makes it possible to decompose code substantially. As an example of a common place for aspect usage is initialization. This is defined as an around-advice that looks like this Originaround( mimic) method(+rest,+ krest,newMimic=aspectCall if(newMimic cell?( initialize),newMimic initialize(*rest,*krest))newMimic) Note first that the around advice takes any kind of arguments, but doesn t send them along to mimic. Instead it checks if there is an initialize-cell, and in that case invokes it with the arguments given to the mimic call. It finally returns the original result. Importing 外部コードの利用 To import new code into Ioke, the methoduseshould be used. The terminology is that you give use a name of a module to include, and if that module has already been included it will not be evaluated again. If it has not been included,usewill try to find the module using several different heuristics. It will add a.ikto the name and try to look up a file of that name - but it will also try to look it up without a.ik, if a full file name has been given. Several different places will be searched, and the exact order and what will be searched can be found by calling theSystem loadPathmethod. This will return a list of all the places that Ioke uses to search for modules. This list can be modified to add more directories to the load path at runtime. If a module of the specified name can t be found, a condition will be signalled. Core kinds よく使うkind Ioke obviously contains lots of different data types, but there are some that are much more important than others. In this chapter I ll take a look at these and talk about how to work with them correctly. Conditions One of the major parts of Ioke is the condition system. Unlike most other programming languages, Ioke doesn t have exceptions. Instead it has conditions, where errors are a specific kind of condition. The condition system comprises several different things. Specifically, the condition system uses the kinds Condition, Restart, Handler and Rescue. Restarts are mostly orthogonal to the rest of the system. The way the condition system works is this. When something happens, a program can elect to signal a condition. This can be done using signal! , warn! or error! . Both warn! and error! use signal! under the covers, but do some other things as well. A condition will always mimic Condition. Each of these three methods can be called in three different ways. First, you can call them with a text argument. In that case the signalled condition will be the default for that type. (The default for signal! is Condition Default. The default for warn! is Condition Warning Default and the default for error! is Condition Error Default.) A new mimic of the default condition will be created, and a cell called text will be set to the text argument. The second variation is to give an instance of an existing condition to one of the methods. In that case that condition will be signalled unmodified. Finally, the third version gives a condition mimic and one or more keyword arguments with data to set on that condition. In that case a mimic of the condition will be created, and then cells with data set based on the arguments. If a signal is not handled, nothing happens. If a warning is not handled, a message will be printed with the text of that warning. If an error is not handled, the debugger will be invoked - if a debugger is available. Otherwise the program will be terminated. A Rescue allows conditions to unwind the stack to the place where the rescue is established. Combining rescues and conditions looks a lot like regular exception handling in other programming languages. A Handler on the other hand will run code in the dynamic context of the place where the condition was signalled. A handler can invoke restarts to handle an error state at the place it happened, and as such doesn t have to actually unwind the stack anywhere. Any number of handlers can run - the last handler to run will be either the last handler, the handler that activates a restart, or the last handler before a valid rescue for that condition. A restart is a way to allow ways of getting back to a valid state. Take the example of referring to a cell that doesn t exist. Before signalling a condition, Ioke will set up restarts so you can provide a value to use in the case a cell doesn t exist. This restart will use that new value and continue execution at the point where it would otherwise have failed. A restart can have a name. If it doesn t have a name it can only be used interactively. You can use findRestart to get hold of the closest restart with a given name. You can invoke a given restart with invokeRestart, which takes either the name of a restart or a restart mimic. Finally, you can get all available restarts using availableRestarts. Both handlers, rescues and restarts are established inside a call to the bind macro. All arguments to this macro need to be either handlers, rescues or restarts, except for the last argument which should be the code to execute. You create a new handler by calling the method handle . You create a new rescue by calling the method rescue . You create a new restart by calling the method restart . These all take funky arguments, so refer to the reference to better understand how they work. This small example doesn t necessarily show the power of conditions, but it can give an idea about how it works. ;; to handle any problembind(rescue(fn(c,nil)),;; do nothing in the rescueerror!( This is bad!! ));; to print all conditions happening, but not do anythingbind(handle(fn(c, c println)), signal!( something )signal!( something more )warn!( A warning!! ));; rescue either of two conditionsC1=ConditionErrormimicC2=ConditionErrormimicbind(rescue(C1, C2,fn(c, got an error #{c} println)), error!(C1));; invoke a restart when no such cell is signaledbind(handle(ConditionErrorNoSuchCell,fn(c, invokeRestart( useValue,42))), blarg println);; will print 42;; establish a restartbind(restart(something,fn(+args, args println)), invokeRestart( something,1,2,3)) The code above shows several different things you can do with the condition system. It is a very powerful system, so I recommend trying to understand it. It lies at the core of many things in Ioke, and some parts will not make sense without a deep understanding of conditions. For more information on what such a system is capable of, look for documentation about the Common Lisp condition system, which has been a heavy influence on Ioke. Also, the debugger in IIk uses the condition system to implement its functionality. There are many conditions defined in the core of Ioke, and they are used by the implementation to signal error conditions of different kinds. Refer to the reference to see which conditions are available. Finally, one thing that you might miss if you re used to exceptions in other languages, is a construct that makes it possible to ensure that code gets executed, even if a non-local flow control happens. Don t despair, Ioke has one. It is called ensure, and works mostly like ensure in Ruby, and finally in Java. It takes one main code argument, followed by zero or more arguments that contain the code to always make sure executes. It looks like this ensure(conn=Databaseopen conn SELECT*FROM a_table, conn close!, conn reallyClose!, conn reallyReallyReallyClose!) This code uses a hypothetical database library, opens up a connection, does something, and then in three different ensure blocks tries to ensure that it really is closed afterwards. The return value of the ensure block will still be the return value of the last expression in the main code. Non local flow control can happen inside of the ensure block, but exactly what will happen is undefined -- so avoid it, please. Text In Ioke, the equivalent of Strings in other languages are called Text. This better describes the purpose of the type. Ioke Text is immutable. All operations that would change the text returns a new object instead. If you are used to Java strings or Ruby strings, then most operations available on Ioke Texts will not come as a surprise. To create a new Text, you use the literal syntax as described in the syntax chapter. You can use interpolation to include dynamic data. You can do several things with Ioke text. These examples show some of the methods ;; repeat a text several times foo *3;; = foofoofoo ;; concatenate two texts foo + bar ;; = foobar ;; get the character at a specific index foo [1];; = 111;; get a subset of text foo [1..1];; = o foo [0..1];; = fo foo [0...1];; = f foxtrot [1..-1];; = oxtrot foxtrot [1...-1];; = oxtro ;; is a text empty? foo empty?;; = false empty?;; = true;; the length of the text foo length;; = 3 length;; = 0;; replace the first occurrence of something with something else hello fox fob folk replace( fo , ba );; = hello bax fob folk ;; replace all occurrences of something with something else hello fox fob folk replaceAll( fo , ba );; = hello bax bab balk ;; split around a text foo bar bax split( );; = [ foo , bar , bax ] The Text kind contains lots of useful functionality like this. The purpose is to make it really easy to massage text of any kind. One important tool for doing that is the format method. This is a mix between C printf and Common Lisp format. At the moment, it only contains a small amount of functionality, but it can still be very convenient. Specifically you can print each element in a list directly by using format, instead of concatenating text yourself. The format method takes format specifiers that begin with %, and then inserts one of its arguments in different ways depending on what kind of format specifier is used. Some examples of format follow ;; insert simple value as text %s format(123);; = 123 ;; insert value right justified by 6 %6s format(123);; = 123 ;; insert value left justified by 6 %-6s format(123);; = 123 ;; insert two values %s %s format(123,321);; = 123 321 ;; insert a list of values formatted the same %[%s, %]\n format([1,2,3]);; = 1, 2, 3, \n ;; insert a dict of values formatted the same % [%s = %s, %]\n format({sam 3, toddy 10});; = sam = 3, toddy = 10, \n ;; insert splatted values from a list wow %*[%s %s %] format([[1,2],[2,3],[3,4]]);; = wow 1 2 2 3 3 4 Numbers As mentioned in the section on syntax, Ioke supports decimal numbers, integers and ratios. A Ratio will be created when two integers can t be divided evenly. A Ratio will always use the GCD. In most cases Ratios, Decimals and Integers can interact with each other as would be expected. The one thing that might surprise people is that Ioke doesn t have any inexact floating point data type. Instead, decimals are exact and can have any size. This means they are well suited to represent such things as money, since operations will always have well defined results. All expected math works fine on Ioke numbers. The reference for numbers more closely specify what is possible. One thing to notice is that the % operator implements modulus, not remainder. This might be unintuitive for some developers. What that means is that it is not an error to ask for the modulus of 0 13 % 0 , since there is no division necessary in this operation. In addition to the above, Integers have the times method described earlier. It can also return the successor and predecessor of itself with the pred and succ methods. Lists Ioke has lists that expand to the size needed. These lists can be created using a simple literal syntax. They can contain any kind of element, including itself (although don t try to print such a list). Ioke List mixes in the Enumerable mixin, which gives it quite powerful capabilities. A list can be created using the list or [] methods ;; an empty list[];; the same list created in two different wayslist(1,2,3)[1,2,3];; a list with different elements[1, one , one] Except for the Enumerable methods, List also defines many other methods that can be highly useful. Some examples are shown below l=[1,2,3];; add two lists togetherl+l;; = [1, 2, 3, 1, 2, 3];; return the difference of two listsl-[2];; = [1, 3];; add a new value to a listl 42l==[1,2,3,42];; = true;; get a specific element from the listl[0];; = 1;; -1 returns the last, -2 the next to lastl[-1];; = 42;; an index outside the boundaries return nill[10];; = nil;; assign a new valuel[3]=40l==[1,2,3,40];; = truel[-1]=39l==[1,2,3,39];; = true;; assign an out of bounds valuel[10]=13l==[1,2,3,39,nil,nil,nil,nil,nil,nil,13];; = true;; at and at= is the same as [] and []=l at(0);; = 1;; empty the listl clear! l==[];; = true;; follows the each protocoll each(println);; is empty?l empty?;; = true;; does it include an element?l include?( foo);; = false;; the last elementl last;; = nil[1,2]last;; = 2;; the length[1,2]length;; = 2;; first value[1,2]first;; = 1;; rest except for first[1,2,3]rest;; = [2, 3];; returns a new sorted list[3,2,1]sort;; = [1, 2, 3];; sorts in placel=[3,2,1]l sort! l==[1,2,3];; = true Dicts A Dict is a dictionary of key-value mappings. The mappings are unordered, and there can only ever be one key with the same value. Any kind of Ioke object can be used as a key. There is no problem with having the same value for different keys. The default implementation of Dict uses a hash-based implementation. That s not necessarily always true for all dicts. The iteration order is not necessarily stable either, so don t write code that depends on it. Creating a dict is done using either the dict or the {} methods. Both of these expect either keyword arguments or mimics of Pair. If keyword arguments, these keywords will be used as symbol keys. That s the most common thing, so it makes sense to have that happen automatically. Dicts also try to print themselves that way. dict(1= 2,3= 4);; these two are the samedict(foo bar , baaz quux )dict( foo= bar , baaz= quux ){1= 2,3= 4};; these two are the same{foo bar , baaz quux }{ foo= bar , baaz= quux };; the formats can be combined {1= 2, foo 42, bar = qux } The literal Pair syntax (using = ) will not necessarily instantiate real pairs for this. Dicts mix in Enumerable. When using each, what will be yielded are mimics of Pair, where the first value will be the key and the second will be value. Just like Lists, Dicts have several useful methods in themselves d={one two ,3= 4};; lookup with [], at works the samed[ one];; = two d[ two];; = nild[3];; = 4d[4];; = nil;; assign values with []=d[ one]= three d[ new]= wow! d=={one three ,3= 4, new wow! };; iterate over itd each(value println);; get all keysd keys==set( one, new,3) Sets If you want an object that work like a mathematical set, Ioke provides such a kind for you. There is no support for literal syntax for sets, but you can create new with the set method. A set can be iterated over and it is Enumerable. You can add and remove elements, and check for membership. x=set(1,2,3,3,2,1)x map(*2)sort; = [2, 4, 6]x===1; = truex===0; = falsex remove!(2)x===2; = falsex 4x===4; = true Ranges and Pairs Both ranges and pairs tie two values together. They also have literal syntax to create them, since they are very useful in many circumstances. A Range defines two endpoints. A Range is Enumerable and you can also check for membership. It s also convenient to send Ranges to the List [] method. A Range can be exclusive or inclusive. If it s inclusive it includes the end value, and if it is exclusive it doesn t. An addition to Ioke S is the possibility of inverted ranges. If the first value is larger than the second value, then the range is inverted. This puts slightly different demands on the objects inside of it. Specifically, if you want to iterate over the elements, the kind you re using need to have a method called pred for predecessor, instead of succ for successor. Membership can still be tested, as long as = is defined. So you can do something like this ( foo .. aoo ) === boo . It s mostly useful for iterating in the opposite direction, like with 10..1, for example. ;; literal syntax for inclusive range1..10;; literal syntax for exclusive range1...10;; check for membership(1..10)===5;; = true(1..10)===10;; = true(1..10)===11;; = false(1...10)===5;; = true(1...10)===10;; = false(1...10)===11;; = false;; get the from value(1..10)from==1;; = true(1...10)from==1;; = true;; get the to value(1..10)to==10;; = true(1...10)to==10;; = true;; is this range exclusive?(1..10)exclusive?;; = false(1...10)exclusive?;; = true;; is this range inclusive?(1..10)inclusive?;; = true(1...10)inclusive?;; = false A Pair represents a combination of two values. They don t have to be of the same kind. They can have any kind of relationship. Since Pairs are often used to represent the elements of Dicts, it is very useful to refer to the first value as the key , and the second value as the value . ;; literal syntax for a pair foo = bar ;; getting the first value( foo = bar )first;; = foo ( foo = bar )key;; = foo ;; getting the second value( foo = bar )second;; = bar ( foo = bar )value;; = bar Enumerable One of the most important mixins in Ioke is Mixins Enumerable - the place where most of the collection functionality is available. The contract for any kind that wants to be Enumerable is that it should implement each in the manner described earlier. If it does that it can mixin Enumerable and get access to all the methods defined in it. I m not going to show all the available methods, but just a few useful examples here. Note that any method name that ends with Fn takes a block instead of a raw message chain. Almost all methods in Enumerable take variable amounts of arguments and do different things depending on how many arguments are provided. The general rule is that if there is only one argument, it should be a message chain, and if there are two or more arguments the last one should be code, and the rest should be names of arguments to use in that code. Mapping a collection into a another collection can be done using map or mapFn. These are aliased as collect and collectFn too. l=[10,20,30,40];; mapping into textl map(asText);; = [ 10 , 20 , 30 , 40 ]l map(n, n asText);; = [ 10 , 20 , 30 , 40 ];; exponentiationl map(**2);; = [100, 400, 900, 1600]l map(n, n*n);; = [100, 400, 900, 1600] Filtering the contents of a collection can be done using select, which is aliased as filter and findAll. ;; with no arguments, return all true things[nil,false,13,42]select;; = [13, 42]l=[1,2,3,4,5,6];; all elements over 3l select( 3);; = [4, 5, 6]l select(n, n 3);; = [4, 5, 6] A very common operation is to create one object based on the contents of a collection. This operation has different names in different languages. In Ioke it is called inject, but it is aliased as reduce and fold. l=[1,2,3,4,5];; inject around a message chainl inject(+);; = 15l inject(*);; = 120;; with one argl inject(n,*n);; = 120l inject(n,+n*2);; = 29;; with two argsl inject(sum, n, sum*n);; = 120l inject(sum, n, sum*2+n*3);; = 139;; with three argsl inject(1, sum, n, sum*n);; = 120l inject(10, sum, n, sum*n);; = 1200 Regexps Regular expressions allow the matching of text against an abstract pattern. Ioke uses the JRegex engine to implement regular expressions. This means Ioke supports quite advanced expressions. Exactly what kind of regular expression syntax is supported can be found athttp //jregex.sf.net. This section will describe how you interact with regular expressions from Ioke. There are two kinds that are used when working with regular expression. First, Regexp, which represents an actual pattern. The second is Regexp Match, which contains information about a regular expression match. It is this match that can be used to extract most information about where and how a complicated expression matched. The standard way of matching something is with the match method. This method is aliased as =~, which is the idiomatic usage. It takes anything that can be converted to a text and returns nil if it fails to match anything, or a Regexp Match if it matches. You can create a new Regexp from a text by using the Regexp from method. You can quote all meta characters in a text by using the Regexp quote method. Finally, if you just want to get all the text pieces that match for a regular expression, you can use Regexp allMatches. It takes a text and returns a list of all the text pieces where the Regexp matched. You can also investigate a Regexp, by asking for its pattern (the pattern method), its flags (the flag method), and the named groups it defines. The names of the named groups can be inspected with the names method. A Regexp Match is specific to one specific match. You will always get a new one every time you try to match against something. A match has a target, which is the original text the regular expression was matched against. So if I do #/ .. / =~ abc fo bar , then the whole abc fo bar is the target. You get the target from a match by using the target method. A match can also be asked for the named groups the regular expression it was matched against support. This is also done with the names method. Match also has two methods beforeMatch and afterMatch, that returns the text before and after the match. The match method returns the text comprising the actual match. The captures method will return a list of all the captured groups in this match. The asList method returns the same things as captures, except it also includes the full match text. To figure out the indices where groups start or end, you can use the start or end methods. These take an optional index that defaults to zero, where group zero is the full match. They can also take a text or symbol that should be the name of a named group. The offset method returns a pair of the beginning and end offset of the group asked for. It works the same as start and end, with regards to what argument it takes. You can use the [] method on Match to extract the one or several pieces of matches. If m is a match, then all of these are valid expressions m[0]. m[1..3]. m[ foo]. m[-2], where the ranges return several groups, and the negative index returns indexed from the end of the list of captures. Finally, a Regexp Match implements pass. It does this in such a way that if you use named groups, you can extract the value for that group by calling a method named the same as that group name. An example of this number= 555-12345 m=#/({areaCode}\d{3})-({localNumber}\d{5})/=~number m areaCode println m localNumber println FileSystem The FileSystem kind allows access to functionality in the file system. It is the entry point to any manipulation of files and directories, and it can also be used to get listings of existing files. The reference includes good information about the existing methods in the FileSystem kind. Other things Ioke supports transforming an object into another object through the use of the method become!. After an object becomes another object, those two objects are indistinguishable from Ioke. This makes it really easy to do transparent proxies, futures and other things like that. To use it, do something like this x= foo y= bar x become!(y)x same?(y); = true In Ioke, objects can also be frozen. When an object is frozen it cannot be modified in any way. Any try at modifying a frozen object will result in a condition. This can be really helpful to track down problems in code, and make assertions about what should be possible. You freeze an Ioke object by calling freeze! on it. You can unfreeze it by calling thaw! on it. You can also check if something is frozen by calling frozen? on it. Java integration Javaとの統合 Java classes can be accessed by their full name, separated with colon instead of dots h = java util HashMap new You can invoke methods as expected, although the rules for this are a bit intricate. Specifically, the rules are that when calling methods that take any kind of primitive arguments (most of the types in java.lang), these values will be unwrapped. That means for a method taking an int, you can send in a wrapped Java Integer, but you can also send in an Ioke Number Rational, and it will be unwrapped correctly. You can send Text and Symbol to methods taking Strings. If you send in data to a method taking Object, you will not get the expected result in all cases. Specifically, in these cases Ioke will unwrap wrapped Java objects, but will not coerce the primitive types. So doingh put( foo , bar )will not coerce Text into java.util.String. However, if you have a java.lang.String that has been modified from the Ioke side - adding cells for example - then that String will be unwrapped before sent to the method call. The return value from a Java invocation will never be modified, except that null will always be changed into nil, and Java booleans will be transformed into Ioke booleans. This means that if you wrap a Java object, do some modifications to it, and then let it go through a Java call, what you will get back is probably not the wrapped version of that object. Of course, later on if you try to call a method on the object, you will still use the wrapped data. The general rule for overloading is that overloaded methods will be sorted from the most specific to the most general. Casts Ioke Java integration supports casts in the same way as Java does. The main difference is that the cast will be evaluated at runtime, not compile time. The name to cast to will be unevaluated. Valid names are either Object, String, any Java class name where dots are separated with colons, and a few special ones to handle primitive values. These names are byte, int, integer, long, short, char, character, float, double and boolean. Casting looks like this x=Foonew x bar((short)123,(org something Interface)anObj) Class methods Methods that belong to the Java class java.lang.Class are treated a bit differently from the way other Java methods work. The reason for this is a bit intricate to explain, but basically comes down to the dichotomy between the way mimicking works in Ioke, and the way inheritance works in Java. The easiest way to explain this might be to take a look at java.util.ArrayList. In Java the hierarchy looks like this (somewhat simplified) instance ArrayList - AbstractList - AbstractCollection - Object - Serializable - Cloneable - Iterable - Collection - List - RandomAccess Note here that all capitalized words are names of classes. The Class itself is not part of the inheritance structure, because Java has two namespaces. In Ioke, the above hierarchy basically ends up looking like this instance - ArrayList - Class - AbstractList - Class - AbstractCollection - Class - Object - Class - Serializable - Class - Cloneable - Class - Iterable - Class - Collection - Class - List - Class - RandomAccess - Class This is slightly simplified too, but the basic idea is that Class has to be part of the same inheritance chain, because there only exists one namespace in Ioke. And that is why there is a need to have these methods named differently. So, for example, say that you want to invoke thetoStringmethod onjava util HashMap. To do that, you do it like this java util HashMap class toString. Note that you can actually use theclass methods on instances of a class too. The result will be the same as if the receiver had been that class instead of the instance. Fields Accessing Java fields can be done by prepending the field name withfield . The exact mechanics of this is that a Java field will result in one or two Ioke methods. That means that the fields are not represented as cells directly on the object. If the field is not final, a setter will be also be generated for it. The setter follows the same rules as invocations of regular methods, with regards to casting and choice of unpacking of arguments. There is a slight gotcha with this scheme. If you try to set a field that is final, you will end up overwriting the accessor for that field - so it s important to be really careful to not set final fields. In the long run, it might be an idea to implement a setter that signals a condition when this happens, but doing that gives the impression that you can set the value - since the setter is there. Ioke doesn t care if a field is private or protected. All fields are accessible. A small example - say that you have a java object infoo. This Java object has two fields calledoneThingandanotherThing. Then you can work with it like this foo field oneThingprintln foo field anotherThing= Bar Systemout println(foo field anotherThing) Note that static fields work the same way - so you can access the Java streams directly like this, for example java lang Systemfield outprintln( some text ) Importing Ioke can import classes just as Java can. The way to do it looks a bit different, though. Also, in Ioke an import only means that a local name will be assigned to a class. It will not necessarily be globally visible, unless you import in a global scope. It s also important to keep in mind that imports will not happen if they might shadow or overwrite a name. If you want that, you will have to do a manual assignment instead. There are three ways of using the methodimport. The first one is simply to import one class with the same name as it already has ;; these are all equivalentHashMap=java util HashMapimport(java util HashMap)import java util HashMap;; you can also import directly into a scopefoo=Originmimicfoo import(java util LinkedHashMap)fooLinkedHashMap new Note that you can only give one class to import when using the above way. The second way to import is when you want to rename the imports. This allow you to import several classes from different packages and also rename them at the same time. This is done using keyword arguments to import ;; these are all equivalentFoo=java util HashMapBar=java lang Stringimport(Foo java util HashMap,Bar java lang String);; you can do the same in a new scope foo=Originmimicfoo import(Foo java util HashMap,Bar java lang String)fooFoonew The third way allow you to import several classes from the same package. Note that to use this way, you need to provide at least one class name, in addition to the package name ;; these are the same as the following importHashMap=java util HashMapLinkedList=java util LinkedListArrayList=java util ArrayListimport( java util, HashMap, LinkedList, ArrayList);; and just as above, you can do it in a scope toofoo=Originmimicfoo import( java util, HashMap, LinkedList, ArrayList)fooLinkedList new Java native arrays In general, working with Java native arrays work exactly like you would expect. The main difference is how you create them. For working with native arrays of primitive types, you can use the primitive type names, which are java byte,java short,java char,java int,java long,java floatandjava double. When setting or getting values from these arrays, they will work exactly like the coercions for regular Java methods. You can either create a new empty array, or you can initialize it based on an existing Ioke list x=java short[5]new x=java short[]from([1,2,3,4,5]) The first version creates a JavaArrayProxyCreator with dimension one, and length 5. The call tonewwill generate the actual array from this. You can create multidimensional arrays by adding new pairs of square brackets. In the second example, the call to square-brackets without an argument, will return the type of that array class. We then callfromon that type, which will take an Ioke list, and generate an equivalent Java native array. You can set and get values in Java arrays, just as you would with Ioke lists x=java char[10]new x[5]=10x[6]=13x[5]println Finally, Java native arrays implementeach, and mimicMixins Enumerable, which means that most things you expect to be able to do with them will work correctly. Adding jar-files to the CLASSPATH If you dynamically want to add new jar-files to the CLASSPATH, you can do that usinguse. There are two ways of doing it - you can either be implicit or explicit, depending on if the module name is unique to a jar-file or not use( the_jar_file )use( the_jar_file.jar )usejar( the_jar_file ) Implementing and extending Java types Ioke Esupports implementing Java interfaces from Ioke, and extending Java classes. This machinery is all done with the methodintegrate. Theintegratemethod takes one or more Java types (it doesn t matter if it s classes or interfaces, but it can only take at most one class), and then returns a new class that is magic in that it will proxy back all calls to the Ioke object, if it defines a method with the corresponding name. This scheme works for most things, but there are some things to keep in mind too. The most important one is that if you override a method that is overloaded in Java-land, it is the responsibility of the Ioke method to handle all the overloads. Using it is very simple IokeRunnable=integrate(java lang Runnable)IokeRunnable run=method( running! println)java lang Threadnew(IokeRunnable new) Note that you have to use thenewmethod to create new instances of this object. In this way it behaves exactly like regular objects in Java integration. And just in the same way, doing mimic will not copy the internal Java object, just the outwards Ioke object. Integration takes care of handling coercion of arguments and return values into what Java expects. Coercing lexical blocks to interfaces Ioke contains a mechanism that will automatically try to coerce anything code-like into an interface or abstract class if no other matching overload can be found for a method. So, that means you can do something like this, and it will work as expected javax swing JButtonnew addActionListener(fn(e, button pressed println)) Libraries ライブラリ Ioke ships with several small libraries that are useful for different tasks. The main ones are IIk, ISpec and DokGen, and these will be documented a bit more in this chapter. All of them are considered a core part of Ioke since the functionality they provide is tied to the distribution. IIk Main article Iik IIk is the interactive Ioke prompt, which will run if you give no arguments to the ioke script. At the IIk prompt you can execute mostly all the same kind of code that could execute inside of an Ioke script file. The main difference is that this code will not be assigned to Ground, but instead will run in another context that is specific for the purposes of IIk. ISpec Main article ISpec ISpec is a minimal port of the Ruby RSpec framework for behavior-driven development. It supports the bare minimum to allow testing of Ioke itself. The current Ioke test suite is completely written in ISpec, and it seems to be a capable environment. DokGen Main article DokGen DokGen is the tool that is used to generate the reference documentation for Ioke, and it generates output similar toRDoc. Its goal is to be a general purpose tool for any Ioke application. What is missing ないもの Ioke E is not a finished Ioke version. I seriously doubt Ioke will ever be complete. The core mechanics of the language I m feeling fairly confident in, but the core libraries are generally only partially implemented. They are much more complete than for the Ioke S release, but there still exist large holes in it. Concurrency support is missing, and so is any kind of advanced IO. Package management and other libraries like that is now starting to become necessary. Finally, alternative implementations for other platforms is also in the pipeline to happen sooner or later. There is aTodolist where we gather those things that should be done, sooner or later. Future plans 今後の予定 I have many plans for the future of Ioke. The next major version of Ioke will be calledIoke P. Exactly what it will contain we ll have to see, but feel free to add your requests and ideas toour TODO list. Retrieved from http //ioke.org/wiki/index.php/Guide Views Page Discussion View source History Personal tools Log in / create account News About Ioke Guide Download Project page Reference Resources Wiki Wiki Main Page Recent changes Search Toolbox What links here Related changes Special pages Printable version Permanent link This page was last modified on 5 April 2009, at 14 32. This page has been accessed 6,503 times. Content is available underGNU Free Documentation License 1.2. Privacy policy About IokeWiki Disclaimers
https://w.atwiki.jp/stalker_cop/pages/21.html
?xml version= 1.0 encoding= windows-1251 ? string_table string id= st_af_baloon_descr text A compound of several hollow organic formations, this artifact emits a gaseous substance that can neutralize radioactive particles inside the body without harming it. Because of its effectiveness, this artifact is in great demand. /text このアーティファクトは自然に接した幾つかの有機物の泡から出来ている。これは放射能を中和できるガスを発生させている。このガスが人体に与える悪影響は確認されていない。高い効果の為に引く手あまたである。 /string string id= st_af_baloon_name text Bubble /text /string string id= st_af_blood_descr text A reddish formation of compressed and fossilized plants, soil and animal debris. Can partially neutralize chemical poisons. Emits radiation. /text 圧力がかかり赤く化石化した植物、土、動物の残骸であるように見える。人体に有害ないかなる化学物質も中和するが放射能を帯びている。 /string string id= st_af_blood_name text Stone Blood /text /string string id= st_af_cristall_descr text This artifact is formed in anomalous zones with intense thermal activity. Actively consumes excessive heat, remaining cool to the touch throughout. Emits radiation. /text 高温のアノマリーの中で生成される。冷たい感触が残っている限り、周囲からアノマリーの高温を吸収する。放射能を帯びている。 /string string id= st_af_cristall_flower_descr text This artifact is made up of a granite-like stone deformed by an extreme gravitational force, resulting in a crystallized formation that has not been explained by science to date. Can provide moderate protection against psy-emissions and is radioactive. /text このアーティファクトは強力な重力の為、現代の科学では説明出来ない結晶化をした花こう岩に似た石から出来ている。Psy-emission の影響を適度に遮断でき、また放射能を帯びている。 /string string id= st_af_cristall_flower_name text Stone Flower /text /string string id= st_af_cristall_name text Crystal /text /string string id= st_af_dummy_battery_descr text The composition of this artifact includes electrostatic elements, but scientists have yet to identify the exact physical conditions required for its formation. The artifact is popular in the Zone and valued by its residents and visitors for its energizing properties, although it can tire the body out through prolonged use. Emits radiation. /text このアーティファクトは静電気を帯びている事が知られているが、科学的にどのように形成されるのかは解明されていない。継続使用する事で疲れを取る強壮作用がある為、Zone の住人と来訪者に評価されている。放射能を帯びている。 /string string id= st_af_dummy_battery_name text Battery /text /string string id= st_af_dummy_dummy_descr text This artifact used to be considered trash, devoid of any useful properties. However, scientists recently discovered that if kept in constant contact with the body, it has an excellent stimulating effect on the nervous system. Emits radiation. /text 以前はこのアーティファクトはなんら役に立つ効果が知られていなかった為がらくただと思われていたが、先頃、人体と常に接触させる事で神経系に刺激を与えることが発見された。放射性を帯びている。 /string string id= st_af_dummy_dummy_name text Shell /text /string string id= st_af_dummy_glassbeads_descr text Much about this artifact remains a complete mystery to scientists. At the same time, it is known for certain that emissions produced by pulses in its thicker sections force blood in open wounds to clot quicker, forming a protective scab. One of the most noticeable effects of this artifact is the increased speed of wound healing. Emits radiation. /text このアーティファクトには謎が多いが、よく知られているのは Mama s Beads の厚みがある部分から発せられる放射は傷口からの流血を急速に凝固させる事である。放射能を帯びている。 /string string id= st_af_dummy_glassbeads_name text Mama s Beads /text /string string id= st_af_electra_flash_descr text This electrostatic artifact is a powerful absorbent of electricity, which it later discharges. Flash is capable of protecting its bearer from electric shocks of up to 5,000 volts. Emits radiation. /text この静電気を帯びたアーティファクトは電気を吸収し、後に放電する。Flash は 5,000 ボルト以内の電撃から所有者を守る事が出来る。放射能を帯びている。 /string string id= st_af_electra_flash_name text Flash /text /string string id= st_af_electra_moonlight_descr text This unique electrostatic artifact can resonate under the influence of psy-waves. Stalkers have learned to fine-tune the artifact so that it resonates in opposite phase to the main source of emissions, thus fully or significantly neutralizing their effects. Emits radiation. /text このアーティファクトは静電気を帯びており、Psy-wave を受けて共鳴する性質を示す。Psy-wave 放出主と同調して共鳴し始める事から Stalker たちは時間を掛けて Moonlight を調整する方法を学んだ結果、完全あるいは実質的に Psy-effect を相殺する事が出来る。放射能を帯びている。 /string string id= st_af_electra_moonlight_name text Moonlight /text /string string id= st_af_electra_sparkler_descr text A bright representative of the electrostatic family of artifacts, this artifact can smooth fluctuations in electric field density. Emits radiation. /text 静電気を帯びたアーティファクトの輝く代表格であり、電磁場の変化を滑らかにする事が出来る。放射能を帯びている。 /string string id= st_af_electra_sparkler_name text Sparkler /text /string string id= st_af_eye_descr text This artifact, which resembles the human eye, considerably increases the body s metabolism, helping wounds heal quicker. Experienced stalkers say that the Eye also brings luck. Emits radiation. /text このアーティファクトは人間の目に似ている。これは傷の周りの新陳代謝を加速させ、回復させる効果があり、その上経験豊かな Stalker 達の間では Eye が幸福をもたらすと信じられている。放射能を帯びている。 /string string id= st_af_eye_name text Eye /text /string string id= st_af_fire_descr text This artifact forms in areas of high thermal activity. Produces powerful infrared emissions, which intensify metabolic processes, healing wounds before its bearer s very eyes. As this artifact is very rare, it is extremely valuable. Emits radiation. /text このアーティファクトは高温な場所で形成される。新陳代謝を高める強力な赤外線を放射し、持ち主が傷を見る前に傷を治す。非常に珍しいアーティファクトの為高値が付く。放射能を帯びている。 /string string id= st_af_fire_name text Flame /text /string string id= st_af_fireball_descr text Even though Fireball is a thermal artifact, it can be handled without fear of being burned. This artifact is valued for its ability to maintain a temperature of 75 degrees Fahrenheit within a small radius, virtually regardless of its surroundings. Emits radiation. /text Fireball という名前にも関わらず、火傷することなく手に持てる。この名前はこのアーティファクトの特徴を示している。このアーティファクトの周辺は、外の環境とは無関係に摂氏 24 ℃ に保つ事が出来る事から評価されている。放射能を帯びている。 /string string id= st_af_fireball_name text Fireball /text /string string id= st_af_fuzz_kolobok_descr text A relatively rare artifact which forms in areas contaminated with chemicals, Kolobok is highly valued for its ability to heal wounds of any kind in mere minutes. For unknown reasons, scientists are spreading rumors among stalkers that the artifact interacts with the bearer s genetic code. Emits radiation. /text 化学薬品で汚染された場所で形成される比較的稀なアーティファクト。Kolobok はほんの数分でどんな怪我も治す効力から高く評価されている。不詳の理由で、Scientist は Stalker 達の間にアーティファクトが所有者の遺伝子にダメージを与えるという噂を広めている。放射能を帯びている。 /string string id= st_af_fuzz_kolobok_name text Kolobok /text /string string id= st_af_glass_name text Firefly /text /string string id= st_af_gold_fish_descr text The result of an interaction between a large number of gravitational fields, Goldfish produces its own powerful internally directed gravitational field, which renders items within its range almost weightless. This artifact is most effective for reducing carried weight, which explains why it is always in great demand. Emits radiation. /text 複数の重力場が相互に作用しあっている場所で形成されるアーティファクト。このアーティファクトの周辺には重力場が形成される。その為バックパックの内容物の重量を、同種のアーティファクトよりもかなり軽減する事が出来、それが Stalker 達から引く手数多である理由だ。放射能を帯びている。 /string string id= st_af_gold_fish_name text Goldfish /text /string string id= st_af_gravi_descr text Gravi is formed from metallic substances exposed to prolonged gravitation. This makes it capable of sustaining an antigravitational field, and many stalkers use it to reduce the weight of their backpacks. Emits radiation. /text Gravi は長期間重力場に晒された金属から形成される。これは半重力場を保持でき、多くの Stalker 達がこれをバックパックの重さを和らげるのに使用する。放射能を帯びている。 /string string id= st_af_gravi_name text Gravi /text /string string id= st_af_ice_descr text At first glance, this artifact resembles Kolobok. Some claim that it actually is Kolobok, its properties reinforced by exposure to a powerful electric field. Thanks to its unique properties, the artifact can significantly increase the bearer s muscle tone. Emits radiation. /text 一見すると Kolobok に似ている。これは実際に強力な電場に晒された事で特性が強化された Kolobok だという説がある。このユニークな特性の為にこのアーティファクトは使用者の筋力を劇的に増加させる事が出来る。放射能を帯びている。 /string string id= st_af_ice_name text Snowflake /text /string string id= st_af_medusa_descr text This gravitational artifact attracts and absorbs radioactive particles, reducing the effects of radiation on the body. Very common in the Zone and is unofficially used outside the Zone for treating acute radiation sickness in exceptional circumstances. /text 活発に放射性粒子を引き付け、吸収しその結果生物の放射能汚染を抑制する効果を持った重力の性質を持ったアーティファクト。Zone ではごく一般的で、Zone 外でもしばしば密かに放射線病を治療するのに用いられる。 /string string id= st_af_medusa_name text Jellyfish /text /string string id= st_af_mincer_meat_descr text This organic artifact consists of deformed, mutated animal tissue. When placed in a chemically contaminated area, Meat Chunk transforms the airborne chemicals into a mucous fluid. Emits radiation. /text この有機的なアーティファクトは生物の組織が変容したものから形成されている。化学汚染された場所に置かれた場合、空気中の化学物質と反応しそれらの化学物質をどろどろした粘着性の塊に変えてしまう。放射能を帯びている。 /string string id= st_af_mincer_meat_name text Meat Chunk /text /string string id= st_af_night_star_descr text This glowing artifact can generate a local directed low-gravity field. Widely used by stalkers along with Gravi, a similar artifact, to increase maximum load. Emits radiation. /text この白熱したアーティファクトは周囲の重力を和らげる事が出来る。Gravi や類似のアーティファクトは Stalker 達に最大積載量を増加させる為に広く使われている。放射能を帯びている。 /string string id= st_af_night_star_name text Night Star /text /string string id= st_af_soul_descr text A unique organic artifact with properties just as unique. Somehow it increases the body s overall recovery rate from damage of any kind, without accelerating the accumulation of toxins. Thanks to its effects and attractive appearance, this artifact is a valuable collector s item. Emits radiation. /text 特殊な性質を持つ有機物でできたアーティファクト。あらゆる種類の負傷の後に未知の仕組みで病原菌が蓄積される前に自然治癒速度を上げる。魅力的な外見から、収集家が特別関心を持っている。放射能を帯びている。 /string string id= st_af_soul_name text Soul /text /string string id= st_af_vyvert_descr text This bizarrely-shaped artifact appears in places with increased gravitational activity. Acting as a kind of sponge that absorbs radioactive elements, this artifact provides protection from outside radiation as well as from radioactive particles that have already made their way into the body. /text 重力場の活動を活発化させる奇妙な外見のアーティファクト。これは一種の放射性元素を吸収するスポンジである。外部からの被爆と既に体内に吸収された放射性元素を吸収する事が出来る。 /string string id= st_af_vyvert_name text Wrenched /text /string string id= st_compass text Compass /text /string string id= st_compass_descr text A rare artifact - it s been several years since one was found. The artifact can locate gaps in anomaly fields. It is believed that it can help one traverse the most complex anomaly fields completely unharmed. However, very few know how to handle it properly. /text 稀なアーティファクト。前回発見されたのは何年も前の事である。アノマリー内部に隙間を生み出す効果がある。複雑に入り組んだアノマリーの中を安全に通り抜けるのに使えると言われているが、正しい使い方を知っている人物は殆ど居ない。 /string string id= st_oasis_heart text Heart of the Oasis /text /string string id= st_oasis_heart_descr text This artifact was found at the center of the legendary Oasis. It appears that the Heart is a crystallized plant, which has acquired the healing properties of the Oasis. Unlike the Oasis itself, however, this artifact is extremely radioactive. /text このアーティファクトは伝説の Oasis の中心から入手したものだ。どうやら生来の Oasis の持つ、人体に有益な効能を持ったまま結晶化した植物のようだ。Oasis とは異なり、かなりの放射能を帯びている。 /string string id= st_af_glass_descr text Firefly interacts with fields unknown to science, considerably speeding up regeneration of tissue and organs in living beings, as well as normalizing metabolic processes. This artifact can literally get a badly wounded stalker back on his feet in seconds. Unfortunately, Firefly is extremely rare. Emits radiation. /text Firefly のもつ、あたかも通常の新陳代謝を行うが如く生物の細胞の再生を加速する働きは未だ化学では解明しきれない領域である。重症患者を文字通り数秒で徒歩で帰す事が出来る。残念ながら、このアーティファクトは非常に稀である。放射能を帯びている。 /string /string_table
https://w.atwiki.jp/vocaloidenglishlyric/pages/186.html
【Tags Darari Len Rerere-P tC tT I】 Original Music Title イケ恋歌 Cool Len s Love Song (IKE Renka) Lyrics written by ダラリ(Darari) Music Lyrics written, Voice edited by れれれP(Rerere-P / Lelele-P) Music arranged by れれれP(Rerere-P / Lelele-P) Singer 鏡音レン (Kagamine Len) This song is included in 恋歌 (Renka) series by and Darari and Lelele-P. Fanmade Promotional Videos Click here for the Japanese Lyrics English Lyrics (translated by animeyay): The singing profession sure sells, but I m trying my best in others shadow. There are still people above me, but I ll soon knock them over. So... please keep looking my way... Don t be unfaithful... I won t like that... Don t look away. Le-le-le please decide on Len Len! ...I say. I ll charm you with my voice... Isn t that great? Le-le-le you listen to me everyday, right? I can still go on... Right? Right! I m not affectionate enough, but that doesn t mean I hate you. I don t love you yet, because I don t yet feel any interest. So... please be serious with me. Even if we are alone right now, I won t feel nervous. Le-le-le the emotion of love? I don t quite understand that kind of thing yet. Le-le-le "Love is only a delusion," someone once said that. Right? Right! (I m actually very nervous. I m nervous around you. My behavior may look strange. It must ve been my lack of self-confidence. I m a good-for-nothing after all, but this is also a way to get loved? If Incompetence Street has 5 levels, then I m pretty much hopeless. I can do anything if I plan ahead. This must be the feeling of success. But this feeling is still faraway, because by age I m still only an 8th-grader. I m best at running away, but that kind of boast doesn t really matter. I ll rely on others to excel. I believe in all of you!) But please continue loving me. With all of you, I can surely take over this world. Le-le-le can I keep up my winning streak? I want to let all of you hear my songs. Le-le-le is this on "Continuous Replay"? Maybe I should show my appreciation... Thank you... Le-le-le I m the one you love, aren t I? You love... Me... Right? Le-le-le you are in love, right? With me of course! ............ Sorry for being so sassy! English Lyrics (translated by soundares: Singing is the sales point but In shadows secretly though I m giving my effort Yet there s more and more better singers above Surely I will draw them away soon So.... Watch me through as I do it... If you cheat... I would hate it, please don t cheat... Don t look aside I m gonna L L L Len you out! Yes With my voice I will charm you.... Can I do that? E E E Everyday you listen to me right? I could do better.... right? I thought so! I am not genial though It really does not mean I hate you It is yet far from love though I am just not getting into the feeling So... Make me serious about love Being just two of us.. by now... I feel OK, so Feeling of a a a affection? I do not know for sure.... those things L L L "Love is just a trick of the imagination" Didn t someone say that, right? Isn t that right? RAP PART- Actually my-heart-is-pounding badly Your words make me nervous My actions carelessly tend to get suspicious I guess all in all I m lacking a self-confidence None the less funk-going me This too maybe a means to be loved in a way? Grade of funk-road is grade five And that just let my hope faint Expected plan is me so cool In basic, sort of a "Doing well" feeling? Just feeling is far far away My age s 8th grader in middle school anyway Escaping from everything is field I m special on "Anyway fine, I don t care" about those boasts Counting on somebody is what I have high skill on I do believe in you guys power! Though... Please keep loving me If you guys are with me... for sure... I should be able to take over the-land-under-sky World Could I upload my songs o o o one after another? I want everyone... to listen to my songs Playing my songs on r r r repeat? Maybe I might want to give appreciation .... Thanks.../// I m your l l l love-target right? You.... love me very much.... Isn t that right? So shall we start this l l l love? With me!! ..........Excuse me! For being sassy ;) Romaji lyrics (transliterated by Hikarin): Utau koto ga uri desu ga Kagenagara doryoku shiteru no desu Mada mada ue ga iru keredo Kitto sugu ni nuite misemasu Dakara... BOKU wo mitete kudasai... Uwaki shitara... IYA desu... yoso mishinai de Re-re-re RENREN ni shite yan yo! ...Desu BOKU no koe de miryou suru... ii deshou? Re-re-re renjitsu kiitemasu yo nee? BOKU motto ikeru hazu... sou deshou? Desu yo nee! Aiso no nai BOKU desu ga Betsu ni kirai na wake ja nai n desu Mada mada koi de wa nai desu ga Doumo ki ga notte konai no desu Dakara... BOKU wo honki ni shite Futarikiri mo... ima de wa... heiki desu kara Re-re-re renka kanjou desu kaa? BOKU wa yoku wakarimasen... sonna no Re-re-re "Renka wa ki no mayoi yo!" Datte dareka itteta sou deshou? Desu yo nee! (Jitsu wa mechakucha DOKIDOKI shiteru KIMI no gendou ni DOGIMAGI shiteru BOKU no gendou wa tsuitsui fushin doumo yappari tarinai jishin Yahari HETAREru jibun kore mo sukareru aru imi shudan? HETARE kaidou dan i wa godan nante kore jaa nozomi wa kihaku Yosou PURAN ja IKEteru jibun kihon ichiou "Dekiteru" kibun? Kibun dake de wa mada mada tooi douse toshi de wa mada mada chuuni Touhi dattara tokui no bunya sonna jiman wa "Dou demo ii ya"? Tarikihongan ni wa taketemasu minna no chikara shinjitemasu!) Dakedo... BOKU wo suki de ite Minna ireba... kanarazu... tenka toreru hazu Re-re-re rentou shite mo ii desu kaa? BOKU no kyoku wo minna ni... kikasetai Re-re-re renzoku saisei desu kaa? Orei kurai iou ka na... arigatou... Re-re-re renka taishou nan desho? KIMI wa BOKU ga... daisuki de... sou deshou? Re-re-re renka itashi masu yo ne? [Darari, Rerere-P, Lelele-P, RerereP, LeleleP] BOKU to!! ............namaiki de SUMIMASEN!
https://w.atwiki.jp/prdj/pages/3607.html
ローグの技 Rogue Talents Sneak Attack Talents Armor Piercer*(変則)/Armor Piercer 出典:Monster Hunter s Handbook 9ページ:A rogue with this talent can cause her sneak attacks to pierce through natural armor. When she hits with an attack that deals sneak attack damage, she can forgo one or more of her sneak attack dice to reduce the target’s natural armor bonus by that amount (minimum natural armor bonus of +0) until the end of her next turn. A creature cannot be affected by this ability again for 1 minute. Emboldening Strike(変則)/Emboldening Strike 出典:Blood of Shadows 8ページ: When a rogue with this talent hits a creature with a melee attack that deals sneak attack damage, she gains a +1 circumstance bonus on saving throws for every 2 sneak attack dice rolled (minimum +1) for 1 round. Extinguishing Strike(変則)/Extinguishing Strike 出典:Blood of Shadows 8ページ:When a rogue with this talent hits a creature with a melee attack that deals sneak attack damage, any nonmagical light sources worn or carried by the creature (such as lit torches, lanterns, or sunrods) are automatically extinguished. Once per day, the rogue can use this ability to also attempt a dispel check (as per dispel magic) against any magical sources of light a target carries, using her rogue level as the caster level. Focusing Attack(変則)/Focusing Attack 出典:Blood of Shadows 8ページ:When a rogue selects this talent, she must choose the confused, shaken, or sickened condition. When the rogue has the selected condition and hits a creature with a melee attack that deals sneak attack damage, the rogue no longer has that condition. A rogue can take this talent up to three times. Each time, she must select a different condition that she is able to remove from herself with a melee attack that deals sneak attack damage. Even if the rogue has taken this talent multiple times, she can remove only a single effect on herself with each melee attack that deals sneak attack damage. Obscuring Blow(変則)/Obscuring Blow 出典:Blood of Shadows 8ページ:Once per day, the rogue can forgo her potential to deal sneak attack damage to attempt to cloud an opponent’s vision. She must declare the use of obscuring blow before she makes the attack. If the attack hits, it does normal damage but, instead of dealing sneak attack damage (and any effect that triggers when the rogue deals sneak attack damage), the target treats all other creatures as if they had concealment, suffering a 20% miss chance on all attack rolls for a number of rounds equal to half the rogue’s level. A successful Fortitude saving throw reduces this effect to 1 round. The DC of this saving throw is equal to 10 + 1/2 the rogue’s level + the rogue’s Intelligence modifier. Sacred Sneak Attack(超常)/Sacred Sneak Attack 出典:Champions of Purity 25ページ:When making a sneak attack against an undead creature or evil outsider, the rogue’s sneak attack damage is considered good-aligned for the purpose of overcoming damage reduction. Normal weapon damage is unaffected for this attack. A rogue must have a good alignment to select this rogue talent. Sever Alignment*(超常)/Sever Alignment 出典:Distant Realms 13ページ:When making a sneak attack against an opponent with an alignment subtype, a rogue with this talent can forgo her sneak attack damage to scramble the creature’s metaphysical nature. If the attack succeeds, the rogue deals weapon damage as normal, and the target must succeed at a Fortitude save (DC = 10 + half the rogue’s level + the rogue’s Intelligence modifier) or lose all damage reduction overcome by aligned weapons (such as DR 10/good), lose all regeneration overcome by aligned sources (such as regeneration 10 [good]), and lose the ability to cast spells and use spell-like abilities with alignment descriptors for 1 round for every 2d6 points of sneak attack damage the rogue would have dealt (minimum 1 round). The rogue must have the aligned sneak attack talent to select this talent. Shadow’s Chill(変則)/Shadow’s Chill 出典:Blood of Shadows 8ページ:When a rogue with this talent hits a creature with a melee weapon that deals sneak attack damage, a number of points of the damage dealt equal to the number of sneak attack dice rolled is cold damage. The remainder of the sneak attack damage and the normal weapon damage are unaffected. The rogue must have cold resistance from a racial trait before selecting this talent. Sneaky Maneuver*(変則)/Sneaky Maneuver 出典:Magical Marketplace 26ページ:Anytime a rogue with this talent could hit an opponent with a melee sneak attack on her turn, she may take a –2 penalty on her attack roll and attempt a dirty trickAPG, disarm, stealAPG, sunder, or trip combat maneuver instead of dealing sneak attack damage. If the attack succeeds, the rogue deals weapon damage as normal and then attempts a combat maneuver check as a swift action (the –2 penalty only applies to the initial attack roll, not the combat maneuver check). This combat maneuver still provokes attacks of opportunity unless the rogue has a feat or ability that allows her to perform it without provoking attacks of opportunity. Stem the Flow(超常)/Stem the Flow 出典:Champions of Purity 25ページ:When making a successful sneak attack against a creature with the ability to channel energy, the rogue may forgo 3d6 points of sneak attack damage to instead prevent the target from channeling energy for a number of rounds equal to half her rogue level. Other Talents Accurate Poisoner(変則)/Accurate Poisoner 出典:Potions and Poisons 13ページ:A rogue with this talent delivers poisons with deadly precision. When the rogue successfully hits an opponent with a poisoned weapon and would deal sneak attack damage, she can forgo the sneak attack damage and increase the poison’s potency. If she does, the poison’s duration increases by 2 (for example, large scorpion venom lasts for 8 rounds instead of 6 rounds, and drow poison lasts for 4 minutes instead of 2 minutes). Acrobatic Assist(変則)/Acrobatic Assist 出典:Cohorts and Companions 27ページ:You can expend an attack of opportunity to perform an aid another action to assist an adjacent ally’s Acrobatics check, so long as he makes the check as part of movement that passes through your space or an adjacent space. Additionally, whenever you use the aid another action to assist an ally in making an Acrobatics check and you succeed, your ally gains a +1 dodge bonus to AC against attacks of opportunity caused when he moves out of or within a threatened area, until the end of his turn. Acrobatic Stunt(変則)/Acrobatic Stunt 出典:Inner Sea Combat 16ページ:Once per day, when flanked by at least two opponents, a rogue with this talent can, as an immediate action when any of the threatening opponents attacks her, attempt an Acrobatics check against the highest CMD of the threatening creatures plus 2 per threatening creature beyond the second. If successful, the rogue may take a 5-foot step in any direction, so long as she remains within the reach of the attacker triggering the movement. The rogue’s final position is used to determine whether the attacker benefits from flanking. On a failed check, the rogue falls prone in her original position and the attack resolves as normal (the opponent gains a +4 bonus for attacking a prone target). A rogue may use this ability one additional time per day for every 5 rogue levels she possesses. A rogue must be trained in Acrobatics to select this talent. Aligned Sneak Attack(超常)/Aligned Sneak Attack 出典:Distant Realms 13ページ:When making a sneak attack against a creature that has damage reduction that can be overcome by weapons of a particular alignment (such as DR 5/good), the rogue’s attack reduces that damage reduction by an amount equal to the number of sneak attack dice rolled until the end of the rogue’s turn. Ambuscading Grapple(変則)/Ambuscading Grapple 出典:Monster Hunter s Handbook 9ページ:When a rogue with this talent succeeds at a combat maneuver check to grapple an unaware opponent, she can immediately deal her sneak attack damage to the target. This counts as having hit with a sneak attack for the purpose of other abilities and talents. Bardic Pretender(変則)/Bardic Pretender 出典:Pathfinder #130 City in the Lion s Eye 76ページ:The rogue knows enough about music and performance to survive in a bardic college and can fake what she doesn’t know. The rogue qualifies as having the inspire competence bardic performance class feature for the purpose of meeting prestige class requirements, although this talent doesn’t grant her the bardic performance ability. Bomber(超常)/Bomber 出典:Ranged Tactics Toolbox 7ページ:A rogue with this talent can make a number of bombs per day equal to her Intelligence modifier (minimum 1). These bombs act as alchemist’s bombs (Pathfinder RPG Advanced Player’s Guide 28), except they deal damage equal to the damage dealt by the rogue’s sneak attack (the rogue doesn’t add her Intelligence modifier to this damage). Bomber’s Discovery(超常)/Bomber’s Discovery 出典:Ranged Tactics Toolbox 7ページ:A rogue with this talent gains an alchemist’s discovery that modifies a bomb. A rogue must have the bomber rogue talent to select this talent. Card Sharp(超常)/Card Sharp 出典:The Harrow Handbook 20ページ:The rogue gains Deadly Dealer (see page 15) as a bonus feat, even if she does not meet the prerequisites. Thrown cards are treated as darts, but the rogue cannot imbue cards with additional power unless she has the Arcane Strike feat. This talent otherwise functions as the Deadly Dealer feat. Castling(変則)/Castling 出典:Elemental Master s Handbook 9ページ:The rogue treats soft cover granted by creatures of her size or larger as though it were cover instead. Cover the rogue gains from this talent does not allow her to attempt Stealth checks. Claimed Turf(変則)/Claimed Turf 出典:Inner Sea Intrigue 32ページ:The rogue is well known in a specific community in which she gains the benefits of renown. She gains the renown vigilante social talent (Pathfinder RPG Ultimate Intrigue 12). This community can be an entire settlement or portions of a settlement (such as a particular district or neighborhood), depending on the population as allowed by the renown social talent. Anytime she could select another rogue talent, the rogue can also select from the following list of social talents (from pages 10–13 of Ultimate Intrigue), using her rogue level as her vigilante level for the purpose meeting of prerequisites celebrity discount, celebrity perks, gossip collector, great renown, incredible renown, loyal aid, and safe house. For the purposes of vigilante social talents, the rogue does not have a vigilante identity and is always considered to be in her social identity. Climbing Stunt(変則)/Climbing Stunt 出典:Inner Sea Combat 16ページ:A rogue with this talent can take a –10 penalty on a Climb check to move at full speed while climbing. A rogue must be trained in Climb to select this talent. Cloying Shades(超常)/Cloying Shades 出典:Blood of Shadows 7ページ:When a rogue with this talent uses dimension door as a spell or spell-like ability, including the abundant step or shadow jump class feature, then all creatures adjacent to the rogue at the start and end of her teleportation are entangled by grasping shadows for 1 round (although the creatures are not anchored in place). A successful Reflex saving throw negates this effect. The DC of this saving throw is equal to 10 + 1/2 the rogue’s level + the rogue’s Intelligence or Charisma modifier (whichever is higher). The rogue must have dimension door as a spell or spell-like ability (including the abundant step or shadow jump class feature) before choosing this talent. Dampen Presence(超常)/Dampen Presence 出典:Magic Tactics Toolbox 27ページ:A rogue who selects this talent gains Dampen Presence (Pathfinder Player Companion Dungeoneer’s Handbook 10) as a bonus feat. The rogue does not need to meet the feat’s prerequisites. The rogue is also considered to have the Skill Focus (Stealth) feat for the purpose of satisfying the prerequisites of any feat that lists Dampen Presence as a prerequisite. Demand Attention(変則)/Demand Attention 出典:Cohorts and Companions 27ページ:The first time each round that you deal sneak attack damage to an opponent, you can forgo sneak attack damage to distract the creature. The target must succeed at a Will save (DC = 10 + the number of sneak attack dice sacrificed + your Charisma modifier) or become distracted until the start of your next turn. Distracted opponents are entirely focused on you, and pay little attention to their surroundings; they are not considered to be observing other characters within 30 feet, allowing them to attempt Stealth checks to hide. A distracted opponent automatically fails Perception checks against creatures more than 30 feet away. Demon Lantern(擬呪)/Demon Lantern 出典:The Harrow Handbook 20ページ:Once per day when she casts dancing lights, the rogue can conjure a single demon’s lantern instead of the usual four lights. A demon lantern acts in all ways as a hypnotic pattern spell cast by a wizard, except it also casts light as a torch and it fascinates only a single target whose Hit Dice do not exceed the rogue’s class level. The save DC of this effect is equal to 11 + the rogue’s Intelligence modifier. The rogue must have an Intelligence score of at least 11 to select this talent. A rogue must have selected the minor magic rogue talent and selected dancing lights as her spell of choice or otherwise be able to cast dancing lights before choosing this talent. Developed Poison Immunity(変則)/Developed Poison Immunity 出典:Heroes of the Wild 21ページ:When this talent is taken, select a single animal or plant poison that the rogue has been poisoned with but survived. The rogue automatically succeeds at all Fortitude saves against exposure to the selected poison. Disabling Stunt(変則)/Disabling Stunt 出典:Inner Sea Combat 16ページ:A rogue with this talent can attempt a Disable Device check against a construct’s CMD as a standard action that does not provoke attacks of opportunity. If the check is successful, the rogue can ignore the construct’s damage reduction when dealing sneak attack damage for 1 minute. The normal penalties apply to this check if the rogue attempts it without using thieves’ tools. A rogue must be trained in Disable Device to select this talent. Disease Use/Disease Use 出典:Blood of the Moon 19ページ:A rogue with this talent can apply filth from garbage, a sewer, a city street, a polluted area, or long-unwashed clothing or fur to a weapon as a standard action. Doing so causes the weapon to inflict filth fever (Pathfinder RPG Core Rulebook 557) on its next strike. The rogue does not risk exposure to this disease unless she is damaged by the weapon. After a successful attack with the weapon, the filth is dispersed and must be reapplied. Eerie Disappearance(変則)/Eerie Disappearance 出典:Heroes of the Streets 26ページ:As a full-round action, the rogue can move up to her speed. If she successfully reaches a location that offers her cover or concealment, any creature observing her must attempt a Perception check opposed by the rogue’s Stealth check. On a failed check, the observer loses track of the rogue and fails to note where she moved to. The rogue does not take a penalty on this Stealth check for moving up to her speed. At the end of her movement, the rogue can attempt an Intimidate check to demoralize all foes within 60 feet who were aware of her at any point during her movement and are unaware of her current location. She rolls the Intimidate check only once and compares her result to the DC for each opponent. The rogue must be at least 6th level to select this talent. Eldritch Conduit(超常)/Eldritch Conduit 出典:Magic Tactics Toolbox 7ページ:Survival in the Mana Wastes between the nations of Nex and Geb can depend heavily on locating sufficient magical equipment, which sometimes involves stealing power from a wand or scroll to power a more necessary one. As a full-round action, a rogue with this talent can use two potions, two wands, or two scrolls. Each item is expended or loses a charge as if used normally. The rogue chooses to gain the magical effect of one, but calculates its effects using the caster level of the other. The rogue must still succeed at a Use Magic Device check to operate scrolls or wands unless some other ability allows him to do so, but makes only one skill check to operate both items. Escaping Stunt(超常)/Escaping Stunt 出典:Inner Sea Combat 16ページ:A rogue with this talent can, as an immediate action, attempt an Escape Artist check in place of a Reflex saving throw against any effect that would impose the entangled condition on her. Additionally, once per day when she is the target of a grapple combat maneuver, a rogue with this talent can attempt an Escape Artist check as an immediate action, using the result of the skill check in place of her CMD against that combat maneuver attempt. A rogue can use this second ability one additional time per day for every 5 rogue levels she possesses. A rogue must be trained in Escape Artist to select this talent. Expert Cypher(変則)/Expert Cypher 出典:Divine Anthology 7ページ:A rogue with this ability can attempt a Linguistics check to decipher a single page of text as a full-round action instead of taking 1 minute as normal. In addition, when the rogue attempts a Use Magic Device check to cast a spell from a scroll, she is treated as though she had the minimum score in the appropriate ability score to cast that spell. Finally, the rogue can choose to add her Intelligence modifier to her Use Magic Device skill checks instead of her Charisma modifier. Extra Earthcraft/Extra Earthcraft 出典:Elemental Master s Handbook 9ページ:The rogue gains 2 additional earthcraft points each day. The rogue must have the earthcraft ability to select this talent. Face in the Crowd(変則)/Face in the Crowd 出典:Blood of the Moon 19ページ:A rogue with this talent can blend into groups easily. Opposed Perception and Sense Motive checks take a –2 penalty when made against the rogue’s Bluff, Disguise, Sleight of Hand, or Stealth checks if she’s within 30 feet of at least two non-hostile characters of her apparent creature type. This penalty increases to –4 if she’s within 30 feet of at least eight such creatures or is currently in a square occupied by a crowd. False Attacker(変則)/False Attacker 出典:Heroes of the Streets 26ページ:Whenever the rogue strikes a foe from hiding, she can attempt a Bluff check as an immediate action (opposed by the target’s Sense Motive or Perception check, whichever has a higher bonus) before rolling damage to convince the foe that another creature was the attacker. This Bluff check applies the normal modifiers for convincing a creature of a falsehood, but can be accomplished with just physical trickery (a shared language is not required). If the Bluff is successful, and the rogue maintains concealment or cover, the rogue’s stealth does not end. Favored Terrain(変則)/Favored Terrain 出典:Heroes of the Wild pg. 21ページ:The rogue selects one terrain from the ranger’s favored terrain list; she gains this as a favored terrain, as the ranger class feature. If the rogue also has or later takes the hide in plain sight advanced talent (Pathfinder RPG Ultimate Combat 71), her favored terrain must match a terrain she has selected for that advanced talent. If the rogue has ranger levels, her effective ranger level is equal to her ranger level + 5 for purposes of improving the bonuses from this favored terrain and gaining new favored terrains. A rogue must be at least 5th level to select this talent. Feint from Shadows(変則)/Feint from Shadows 出典:Blood of Shadows 8ページ:A rogue with this talent can feint in combat using a ranged weapon against a target within 30 feet and cause the opponent to lose his Dexterity modifier against her next melee or ranged attack. The rogue must have concealment (but not full concealment) from the target of the feint. Flying Stunt(変則)/Flying Stunt 出典:Inner Sea Combat 16ページ:A rogue with this talent can attempt a Fly check against a target’s CMD as a swift action when charging from above that target. Success allows the rogue to add an amount damage equal to her Dexterity modifier to the attack’s damage. This additional damage is precision damage and is not multiplied on a critical hit. A creature immune to sneak attacks is immune to this additional damage. A rogue must be trained in Fly to select this talent. Fortified Position(変則)/Fortified Position 出典:Elemental Master s Handbook 9ページ: Whenever the rogue gains a bonus on Reflex saves due to cover, she gains an equal bonus on Fortitude saves. Gloom Magic(擬呪)/Gloom Magic 出典:Blood of Shadows 8ページ:A rogue with this talent gains the ability to cast darkness two times per day as a spell-like ability. The darkness created by this ability does not impair the rogue’s vision. The caster level for this ability is equal to the rogue’s level. A rogue must have an Intelligence score of at least 12 and the minor magic rogue talent before choosing this talent. Got Your Back(変則)/Got Your Back 出典:Cohorts and Companions 27ページ:Once per round as an immediate action, you may expend an attack of opportunity to attempt an aid another check to improve an ally’s attack. You and your ally must both be flanking the same opponent. This counts as an attack of opportunity. Greater Gloom Magic(擬呪)/Greater Gloom Magic 出典:Blood of Shadows 8ページ:A rogue with this talent gains the ability to cast deeper darkness once each day as a spell-like ability. The darkness created by this ability does not impair the rogue’s vision. The caster level for this ability is equal to the rogue’s level. A rogue must have an Intelligence score of at least 13 and the gloom magic and minor magic rogue talents before choosing this talent. Green Tongue(変則)/Green Tongue 出典:Heroes of the Wild 21ページ:The rogue gains Aklo, Aquan, Auran, Giant, Ignan, Sylvan, or Terran as a bonus language. In addition, the rogue can attempt a DC 15 Linguistics check to communicate basic concepts with magical beasts and monstrous humanoids with which she does not share a common language. Grig Jig(超常)/Grig Jig 出典:The Harrow Handbook 20ページ:Once per day, the rogue can weave a bit of old Varisian magic into her footwork, dancing with an infectious passion that compels another nearby to join in. The rogue can target one humanoid within 30 feet and attempt a Perform (dance) check as a full-round action that does not provoke an attack of opportunity. Her target must succeed at a Will save (DC equal to the rogue’s Perform [dance] check) or it begins to dance uncontrollably. So long as the rogue continues to spend a full-round action dancing each round, the affected target does so as well. If the target is attacked or otherwise in immediate danger while dancing, the effect ends. Each round on its turn, the target can attempt an Acrobatics or Perform (dance) check or a Will save (target’s choice) against the rogue’s Perform (dance) check to end the effect. A target who resists the jig can not be affected by the same rogue’s jig for 24 hours. The grig jig is a mind-affecting effect. The rogue must have an Intelligence score of at least 12 to select this talent. A rogue can use this ability once per day, plus one additional time per day for every 5 rogue levels she possesses. Heads Up(変則)/Heads Up 出典:Cohorts and Companions 27ページ:When you make a Perception check, as an immediate or swift action you can allow one adjacent ally to act as if they had also made a Perception check with the same result. Innocent Facade(擬呪)/Innocent Facade 出典:Magic Tactics Toolbox 27ページ:Once per day, a rogue with this talent can use innocenceAPG as a spell-like ability, using her rogue level as the spell’s caster level. A rogue must have the minor magic talent before selecting this talent. An investigator can select the innocent facade rogue talent in place of an investigator talent. She must have the underworld inspirationACG investigator talent before selecting this talent, instead of minor magic. Innocuous Servant(変則)/Innocuous Servant 出典:Inner Sea Intrigue 32ページ:The rogue is an expert at appearing to be an unimportant servant, be it an attaché, bodyguard, driver, maid, kitchen assistant, or similar staff member. The rogue gains a +2 bonus on Disguise checks to appear to be a servant, but not to impersonate a particular servant. She also gains a +2 bonus on Bluff checks to lie to maintain this guise. While disguised as a servant, she gains a +2 bonus on Diplomacy checks to gather information among servants. Because she is easily overlooked as a servant, she can gather information from those she serves without asking them questions directly or alerting them to her interest. Doing so takes 1d4 days and requires a successful Bluff check instead of a Diplomacy check. At 8th level, the bonuses granted by this talent increase to +4. Just a Face in the Crowd(超常)/Just a Face in the Crowd 出典:Magic Tactics Toolbox 7ページ:The rabble-rousers of Galt can blend into a crowd and are able to hide and spot others who appear to be hiding. The rogue gains a bonus equal to half his class level on Disguise and Perception checks when 10 or more creatures of his size are within 30 feet of him. Last Ditch Effort/Last Ditch Effort 出典:People of the Sands 19ページ:Once per day, a rogue with this ability who accidentally activates a trap while attempting to disarm it may immediately attempt another Disable Device check to disarm it, albeit at a –5 penalty. The result of the second check is taken even if the result is lower. Lingering Poison(変則)/Lingering Poison 出典:Potions and Poisons 13ページ:A rogue with this talent can have a poison remain inert until a later time. When she delivers a contact or injury poison, instead of the poison’s normal onset time, the rogue can delay the poison’s effects until up to 1 day from when it is delivered (minimum 1 round). The delayed poison can be detected as normal by spells such as detect poison and similar abilities. Maneuvering Dodge(変則)/Maneuvering Dodge 出典:Inner Sea Intrigue 32ページ:Whenever a foe of the rogue’s size or larger misses the rogue with a melee attack, the rogue gains a +2 bonus on any Acrobatics, Climb, Fly, and Swim checks she attempts for 1 round. At 8th level, this bonus increases to +4. Mien of Despair(超常)/Mien of Despair 出典:Blood of Shadows 8ページ:When a rogue with this talent successfully demoralizes an opponent using the Intimidate skill or performs a successful feint against an opponent, the opponent loses any morale bonuses and cannot benefit from any morale bonuses for 1d4+1 rounds. Occult Dungeoneer(超常)/Occult Dungeoneer 出典:Magic Tactics Toolbox 7ページ:Street thieves in Absalom expect wares to be securely locked, and sometimes it takes high-quality tools and magic training to ensure there’s a meal at the end of the day. A rogue with this ability can use spell-trigger and spell-completion items as if the following spells were on a spell list to which he has access detect secret doors, detect traps, knock, locate object, and obscure object. If the spell-trigger device allows a wielder to apply his own caster level (such as with a staff ), the rogue may use his class level as his caster level. The rogue may also use knock as a supernatural ability once per day, using his rogue level as his caster level. One of Those Faces(擬呪)/One of Those Faces 出典:Spymaster s Handbook 21ページ:Each day, you can use disguise self as a spell-like ability for up to 10 minutes per character level. This duration need not be continuous, but it must be used in 10-minute increments. Additionally, once you have used this ability, whenever you use it for the next 24 hours you must take the same alternate appearance. Papercraft Tools(変則)/Papercraft Tools 出典:The Harrow Handbook pg. 21ページ:Traditional thieves’ tools might be suspicious, but no guard looks twice at a common deck of cards. So long has the rogue has access to a deck of cards, she can destroy one card to attempt a single Disable Device check as if she had a set of thieves tools. If she uses a harrow card for this purpose, she can treat the card as a set of masterwork thieves’ tools (granting her a +2 circumstance bonus on the Disable Device check), though the card is still destroyed after use. Philologist/Philologist 出典:People of the Sands 19ページ:A rogue with this talent can reroll any Linguistics skill check made to decipher writing in an unfamiliar language, and never risks drawing a false conclusion from a failed Wisdom check after a failed Linguistics check. A rogue with this talent is allowed only one reroll per inscription, message, or text encountered. Poison Use(変則)/Poison Use 出典:Blood of Shadows 8ページ:The rogue is trained in the use of poison, and can’t accidentally poison herself when applying poison to a weapon. Quick Scrounge/Quick Scrounge 出典:Blood of the Moon 19ページ:The rogue can search a creature, object, or area in half as much time as normal. If her Perception check would normally require a full-round action or less, it becomes one step shorter along the following progression full-round action, standard action, move action, swift action, immediate action. This talent has no effect on Perception checks that are attempted as free actions or Perception checks that don’t require an action. Rapid Boost(変則)/Rapid Boost 出典:The Harrow Handbook 21ページ:Once per day, the rogue can roll two dice while attempting a Sleight of Hand check and take the better result. She must choose to use this talent before attempting the Sleight of Hand check. A rogue can use this ability one additional time per day for every 5 rogue levels she has. Rapid Perception(超常)/Rapid Perception 出典:Magic Tactics Toolbox 27ページ:A rogue with this talent can attempt a Perception check to intentionally search for a specific item or creature as a swift action instead of a move action. If she is intentionally searching for an invisible creature, the creature’s bonus on its Stealth check from its invisibility is halved. An investigator can select this rogue talent in place of an investigator talent. She must have the expanded inspirationACG investigator talent before selecting this talent. Riding Stunt(変則)/Riding Stunt 出典:Inner Sea Combat 16ページ:A rogue with this talent takes only a –2 penalty on Ride checks when riding a mount bareback instead of the normal –5 penalty. When using the Ride skill to make a mount leap, a rogue with this talent can use her Ride modifier or her mount’s jump modifier, whichever is higher, instead of using the lower of the two. A rogue with this talent gains a +5 competence bonus when using the Ride skill to soften a fall from her mount or to perform a fast mount or dismount. Finally, a rogue with this talent can attempt a DC 15 Ride check to recover from a position of cover as a free action instead of as a move action. Failing this check results in the recovery requiring a move action as normal. A rogue must be trained in Ride to select this talent. Sacrifice Self(変則)/Sacrifice Self 出典:Champions of Purity 25ページ:A rogue who makes a successful Reflex save against an area effect can ignore the benefits of her evasion ability to shield an adjacent ally against the effect, essentially halving the damage that ally would normally take. A rogue with improved evasion can attempt a secondary save against her ally’s damage. If the save is successful, neither she nor her ally takes any damage. A rogue must have evasion in order to select this talent, and she must have improved evasion to benefit from the secondary effect. Scavenger/Scavenger 出典:Blood of the Moon 19ページ:A rogue with this talent can pick up and stow an object as a swift action instead of two separate move actions. She gains a +2 bonus on Sleight of Hand checks to pick the pockets of creatures that are stunned or disabled. Scry Slip(超常)/Scry Slip 出典:Magic Tactics Toolbox pg. 27ページ:Whenever a rogue with this talent is targeted by a scrying effect that allows a Will save, the caster of the divination must succeed at a caster level check (DC = 15 + the rogue’s class level). This talent wards the rogue and any objects she is holding or carrying. An investigator can select this talent in place of an investigator talent. Scrying Familiarity(変則)/Scrying Familiarity 出典:Spymaster s Handbook 23ページ:You are well acquainted with scrying sensors. You can roll twice and take the better result on saving throws against divination (scrying) spells and effects, on Perception checks to notice scrying sensors, and on caster level checks to overcome spell resistance when you use a scrying spell or effect. If you notice a magical sensor, you can attempt a Stealth check opposed by the caster’s caster level check to avoid being detected by the sensor. Sczarni Smuggler(変則)/Sczarni Smuggler 出典:Inner Sea Intrigue 32ページ:The rogue has picked up Sczarni tricks for making masterful forgeries and using bribery to evade trade rules. The rogue needs to learn only the approximate appearance of a document that doesn’t require a particular person’s signature to accurately forge the document with Linguistics (gaining a +8 bonus on the check to create the forgery, as if she had seen a similar document before). The rogue needs only a small sample of a person’s handwriting to make a convincing forgery of great length in that person’s handwriting. The rogue can always take 10 on Diplomacy checks to offer bribes. In addition, the rogue automatically gains an extra advantage at the start of a pursuit (Ultimate Intrigue 142) in an urban environment. Set-Up(変則)/Set-Up 出典:Cohorts and Companions 27ページ:When you successfully hit a target with a sneak attack in melee, you can choose to forgo your additional sneak attack damage to make the target more vulnerable to one of your allies adjacent to it. The first melee attack that ally makes against the target before the beginning of your next turn treats the target as flanked, even if your ally is not flanking the target. This has no effect on creatures you could not flank with that ally, even if the ally was properly positioned. Shadow Duplicate(擬呪)/Shadow Duplicate 出典:Blood of Shadows 8ページ:Once per day as an immediate action when the rogue is hit, the rogue can create a single shadow duplicate of herself, as per mirror image. The GM randomly determines whether the attack hit the rogue or the shadow duplicate. The shadow duplicate lasts for a number of rounds equal to the rogue’s level, or until the shadow duplicate is dispelled or destroyed. This ability does not stack with the mirror image spell. The caster level for this ability is equal to the rogue’s level. A rogue can use this ability one additional time per day for every 5 rogue levels she has. Shove Aside(変則)/Shove Aside 出典:Cohorts and Companions 27ページ:When you and an adjacent ally are both in the area of an attack that requires a saving throw, you can take a –4 penalty on your saving throw to grant your ally a +4 bonus on his saving throw. You lose the evasion ability against this attack. If you have improved evasion, it is reduced to evasion for this attack instead. A rogue must have evasion to select this rogue talent. Signature Poison(変則)/Signature Poison 出典:Potions and Poisons 13ページ:A rogue with this talent chooses one poison (such as bloodroot or oil of taggit) as her signature poison. When she uses the chosen poison, the poison’s saving throw DC increases by +2. A rogue can take this talent multiple times, each time applying it to a new poison. Sleight of Hand Stunt(変則)/Sleight of Hand Stunt 出典:Inner Sea Combat 16ページ:In place of an attack of opportunity, a rogue with this talent can attempt a Sleight of Hand check against the CMD of an opponent that provokes an attack of opportunity by firing a projectile weapon while threatened. If successful, the rogue plucks the ammunition from the provoking weapon, negating the attack. The rogue may use this ability as many times in a round as she could make attacks of opportunity. At the GM’s discretion, certain projectile weapons may not be susceptible to this ability, such as siege engines or firearms. A rogue must be trained in Sleight of Hand to select this talent. Sneak Training(変則)/Sneak Training 出典:Pathfinder #130 City in the Lion s Eye 76ページ:The rogue counts as having the sneak attack class feature of a rogue of her level for the purpose of meeting prestige class requirements, although this talent doesn’t improve the rogue’s existing sneak attack ability or grant her the sneak attack class feature if she doesn’t already have it. This talent is most useful for rogues that lack the sneak attack class feature, such as those with the phantom thief archetype. Spell Storing(超常)/Spell Storing 出典:Magic Tactics Toolbox 7ページ:The rogue can store within himself a single targeted harmless spell of up to 2nd level. The spell must have a casting time of 1 standard action. Anytime a spell that meets these conditions is cast on the rogue, and he does not already have a spell stored, he can choose to store it rather than have it take effect immediately. Anytime afterward, as a standard action, the rogue can have the spell take effect (acting in all ways as if it had just been cast on him). A rogue must have 1 rank of Use Magic Device to select this talent. Stealth Stunt(変則)/Stealth Stunt 出典:Inner Sea Combat 16ページ:When benefiting from concealment, a rogue with this talent can forgo an attack of opportunity to attempt a Stealth check against the provoking opponent’s CMD. Success allows the rogue to treat her opponent as flat-footed against the rogue’s first melee attack before the end of her next turn. Using this ability does not count against the rogue’s available attacks of opportunity for the round. A rogue must be trained in Stealth to select this talent. Superior Sniper/Superior Sniper 出典:Magic Tactics Toolbox 7ページ:A rogue who selects this talent gains Expert Sniper (Dirty Tactics Toolbox 10) as a bonus feat. If she already has this feat, she can instead select any feat that lists Expert Sniper as a prerequisite, as long as she meets the feat’s prerequisites. Suppress Poison(変則)/Suppress Poison 出典:Potions and Poisons 13ページ:A rogue with this talent can stave off the effects of a poison. As an immediate action when she fails a saving throw against a poison, the rogue can attempt the saving throw a second time. If she succeeds at this second saving throw, the poison does not affect her for a number of rounds equal to her Constitution modifier (minimum 1 round), but this time it counts against the poison’s duration. This talent has no effect on poisons with an onset longer than immediate. Swift Tracker(変則)/Swift Tracker 出典:Heroes of the Wild 21ページ:While following tracks, the rogue can move at her normal speed without penalty while using the Survival skill. In addition, the penalty for moving at up to twice her normal speed while following tracks is reduced to –10. Swimming Stunt (変則)/Swimming Stunt 出典:Inner Sea Combat 16ページ:Once per round, when making an attack against an opponent underwater that qualifies for sneak attack damage, a rogue with this talent can attempt a Swim check as a free action against her opponent’s CMD. If the attack and Swim check are both successful, and the attack deals sneak attack damage, the rogue can choose to forgo one or more of her sneak attack dice to reduce the number of total rounds her opponent can hold its breath by 1 round per die. A rogue must be trained in Swim to select this talent. The Whole Time(超常)/The Whole Time 出典:Magic Tactics Toolbox 7ページ:Mercenaries in the employ of the Aspis Consortium often use wands of invisibility to attack protected targets, then blend into the crowd to escape or disguise the source of the next attack. A rogue with this ability is practiced at attacking from magical concealment. He can use spell-trigger and spellcompletion items as if the following spells were on a spell list to which he has access greater invisibility, invisibility, and vanishAPG. Additionally, if the rogue becomes visible as a result of a weapon or spell attack, he can sheathe his weapon as a free action and instantly adopt a neutral posture. With a successful Bluff or Disguise check (opposed by witnesses’ Sense Motive or Perception checks, whichever is higher), there is no obvious sign that the rogue is the source of the attack (though a lack of any other reasonable candidate can still lead observers to draw the correct conclusion). Thrill of the Chase(変則)/Thrill of the Chase 出典:Inner Sea Intrigue 32ページ:The rogue revels in the thrill and adrenaline rush of a challenging chase. When engaged in a chase (Pathfinder RPG GameMastery Guide 232) or pursuit (Ultimate Intrigue 142), the rogue gains one d20 reroll which she can use at any time after the original roll is made but before the results of the roll are revealed; she must take the second result, even if it is lower. She can use this reroll once per chase or once per day during a pursuit. Additionally, she gains Run as a bonus feat. Toxic Regurgitation(変則)/Toxic Regurgitation 出典:Potions and Poisons 13ページ:A rogue with this talent can drink a noninhaled poison as a standard action and suspend it within her body. She is not affected by the poison while it is suspended within her, and she doesn’t need to attempt saving throws against it. She can suspend a poison within herself in this way for a number of hours equal to her Constitution modifier (minimum 1), after which she must immediately expel the poison or be affected by it as normal. At any time while the poison is suspended within her, the rogue can spit up the poison as a ranged touch attack at any creature within 10 feet. This does not provoke attacks of opportunity. On a successful hit, the struck creature is exposed to the poison as if it were a contact poison. The rogue can maintain only a single suspended poison at a time. If she suspends a new poison, any older suspended poison immediately affects her as normal. Umbral Gear(超常)/Umbral Gear 出典:Blood of Shadows 8ページ:As a standard action while in an area of dim light or darkness, a rogue with this talent can coalesce wisps of shadow into a quasi-real, functional item. The rogue must choose whether to make a crowbar, 50 feet of silk rope, a glass cutterUE, a light melee weapon with which she is proficient, a reversible cloakUE, thieves’ tools, or a wire sawUE; the GM may allow other similar items. The rogue can use such items for a number of minutes per day equal to 10 plus her rogue level. This duration does not need to be consecutive, but it must be used in 1-minute increments. An item created with this ability remains until the rogue is no longer touching it, or until the rogue runs out of duration for this talent, at which time it dissolves. A rogue can select this talent more than once, gaining an additional 10 minutes of duration each time this talent is selected. If a rogue has selected this talent at least twice, she adds 50 feet of silk rope with a grappling hook, a masterwork light melee weapon with which she is proficient, and masterwork thieves’ tools to the list of things she can create. Unbalancing Trick(変則)/Unbalancing Trick 出典:Elemental Master s Handbook 9ページ:The rogue gains Improved Trip as a bonus feat, even if she does not meet the prerequisites. At 6th level, she is treated as if she meets all the prerequisites of Greater Trip (although she must take the feat as normal to gain its benefits). Underhanded Trick/Underhanded Trick 出典:Blood of Shadows 8ページ:A rogue who selects this talent gains Improved Dirty TrickAPG as a bonus feat, even if she does not meet the prerequisites. At 6th level, she is treated as if she meets all the prerequisites for Greater Dirty TrickAPG (although she must take the feat as normal). If she succeeds in giving her target the blinded condition, the target cannot remove the condition during the first round of blindness. Wild Magic(擬呪)/Wild Magic 出典:Heroes of the Wild 21ページ:A rogue with this talent gains the ability to cast a 0-level spell from the druid spell list. This spell can be cast three times per day as a spell-like ability. The caster level for this ability is equal to the rogue’s level. The save DC for this spell is 10 + the rogue’s Wisdom modifier. The rogue must have a Wisdom score of at least 10 to select this talent. Without a Trace(変則)/Without a Trace 出典:Ranged Tactics Toolbox 7ページ:When the rogue successfully uses evasion or improved evasion to avoid taking damage, she can attempt to hide as an immediate action. The rogue attempts a Stealth check with a –20 penalty, but gains a +1 bonus on her check for every die of damage the avoided attack would have dealt. The rogue can attempt this check even while being observed, as long as she has cover or concealment or an ability that allows her to use the Stealth skill while being observed without cover or concealment. 上級の技 Advanced Rogue Talents Sneak Attack Talents Hamstring Strike*(変則)/Hamstring Strike 出典:Magical Marketplace 26ページ:Anytime a rogue with this talent successfully hits an opponent with a sneak attack, she may forgo her sneak attack damage to try to hamstring her opponent. If the attack succeeds, the rogue deals weapon damage as normal, but instead of the rogue dealing sneak attack damage, the target is knocked prone and is unable to take move actions during its next turn. A successful Fortitude save (DC = 10 + 1/2 the rogue’s level + the rogue’s Dexterity modifier) negates this effect. Harrow Strike(変則)/Harrow Strike 出典:The Harrow Handbook 21ページ:Once per day while making a sneak attack against a creature, you can draw a random card from a harrow deck you own. If your attack hits, instead of dealing sneak attack damage as normal, you deal a number of points of ability damage equal to your number of sneak attack dice. The ability score damaged is the score affiliated with the suit of the harrow card drawn. You can use this ability an additional time per day at 15th level and 20th level. Improved Shadow’s Chill(超常)/Improved Shadow’s Chill 出典:Blood of Shadows 9ページ:When a rogue with this talent hits a creature with a melee weapon that deals sneak attack damage, the sneak attack damage is cold damage. Normal weapon damage is unaffected. The rogue must have cold resistance from a racial trait and the shadow’s chill rogue talent before choosing this talent. Petrifying Strike(超常)/Petrifying Strike 出典:Elemental Master s Handbook 9ページ:Whenever the rogue damages a creature with one of her sneak attacks, she also deals 2 points of Dexterity damage to that creature as its body petrifies. Resonating Rumbles(超常)/Resonating Rumbles 出典:Elemental Master s Handbook 9ページ:When a rogue with this talent makes a successful sneak attack against a creature with tremorsense, the rogue can subtract 3 dice from her sneak attack damage to prevent the target from using tremorsense for a number of rounds equal to half her rogue level. Other Talents Against the Wall(変則)/Against the Wall 出典:Elemental Master s Handbook 9ページ:A rogue with this talent is considered to be flanking any opponent adjacent to a stone wall (whether the stone is worked or unworked). Aligned Disguise(擬呪)/Aligned Disguise 出典:Blood of Shadows 8ページ:When a rogue with this talent uses the disguise self spell-like ability, she can also alter her alignment aura to deceive spells that discern alignment (such as detect evil) for the duration of the disguise self effect. She can choose to detect as any specific alignment, or to detect as no alignment at all. This ability does not protect against spells or effects that cause harm based on alignment. The rogue must have disguise self as a spell-like ability before choosing this talent. Blinding Strike/Blinding Strike 出典:Blood of Shadows 9ページ:A rogue who selects this talent gains Blinding Critical as a bonus feat, even if she doesn’t meet the prerequisites. The rogue must have the obscuring blow rogue talent and be at least 15th level before choosing this talent. Dance of Disorienting Shadows(変則)/Dance of Disorienting Shadows 出典:Blood of Shadows 9ページ:A rogue with this talent can attempt a Perform (dance) check in place of a combat maneuver check when attempting a repositionAPG combat maneuver. Glib Facade(擬呪)/Glib Facade 出典:Magic Tactics Toolbox pg. 27ページ:Once per day, a rogue with this advanced talent can use glibness as a spelllike ability, using her rogue level as the spell’s caster level. A rogue must have the innocent facade rogue talent before selecting this talent. Grazing Shot(変則)/Grazing Shot 出典:Agents of Evil 24ページ: Grazing Shot(変則)/Grazing Shot 出典:Agents of Evil 24ページ:The following rogue talent is available to drow rogues. Particularly deft rogues can strike two foes with one well-placed shot. As a standard action, a rogue with this talent can fire a hand crossbow at an enemy who is granted cover by another opponent. Make one ranged attack roll and compare the result to each opponent’s AC. Each hit deals 1 point of damage. Any special weapon properties or precision damage apply to only a single target, but any poison applied to the bolt affects all targets struck. An unchained rogue can select this talent. Pierce the Darkness(変則)/Pierce the Darkness 出典:Heroes of the Streets 26ページ:The rogue can extend her senses of hearing and smell in darkness or when blinded. She gains blindsense out to a range of 5 feet, but only against creatures concealed by darkness or her own blindness. She still suffers the normal miss chance for attacking creatures with concealment. Reflexive Shadow Shield(超常)/Reflexive Shadow Shield 出典:Blood of Shadows 9ページ:Once per day as an immediate action, the rogue can gain an amount of cold resistance or electricity resistance equal to half the rogue’s level. This resistance lasts for 1 round. If the rogue has the shadowy resistance racial trait, the cold or electricity resistance stacks with the resistance that trait grants; otherwise, the energy resistance does not stack with any cold or electricity resistance the rogue has. The rogue must have the resiliencyPU rogue talent before choosing this talent. See in Darkness(超常)/See in Darkness 出典:Blood of Shadows 9ページ:The rogue gains the see in darkness ability (Pathfinder RPG Bestiary 2 301). A rogue must have darkvision before choosing this talent. Stony Skin(変則)/Stony Skin 出典:Elemental Master s Handbook 9ページ:A rogue with this talent gains DR 2/adamantine. A rogue can select this talent up to three times; each additional time the rogue selects this talent, the DR granted by this talent increases by 1. Unlock Ki(超常)/Unlock Ki 出典:Magic Tactics Toolbox 27ページ:A rogue with this advanced talent increases the number of points in the ki pool that she gains from the ki poolUC rogue talent to be equal to 1/2 her rogue level + her highest mental ability score modifier (Intelligence, Wisdom, or Charisma). In addition, she can spend 2 points from her ki pool as a swift action to gain the skill unlocks (Pathfinder Unchained 82) for one skill of her choice as appropriate for her number of ranks in that skill. This benefit lasts for 1 minute. The rogue must have a ki pool before selecting this advanced talent.
https://w.atwiki.jp/annomod/pages/48.html
default_Neutral Buildings Texts 5310000 [THIRDPARTY_SENDER_PLAYER] は交易所と道で繋ぐ必要があります。 [THIRDPARTY_SENDER_PLAYER] と交易所とを道で繋がなければなりません。 [THIRDPARTY_SENDER_PLAYER] が [THIRDPARTY_CITY] に以下のものを届けてくれました [CR][THIRDPARTY_WARES dark] [THIRDPARTY_SENDER_PLAYER] と道が繋がりました。 NB_01 Alchemist s tower 5301000 Profil 5301000 [THIRDPARTY_SENDER_PLAYER] benötigt [THIRDPARTY_QUEST_WARES] für sein Experiment. [THIRDPARTY_SENDER_PLAYER] は、実験材料を提供してもらう必要があると言っています。 [THIRDPARTY_SENDER_PLAYER] は研究の準備にもう少し時間が必要だと言っています。 [THIRDPARTY_SENDER_PLAYER] は至急材料が必要だと言っています。 [THIRDPARTY_SENDER_PLAYER] は実験に成功しました。[CR][THIRDPARTY_REWARD] [THIRDPARTY_SENDER_PLAYER] は実験に失敗しました。[CR][THIRDPARTY_REWARD] [THIRDPARTY_SENDER_PLAYER] は実験に忙しいようです。 Quests 5301100 StandardQuests Precious Cargo The strength of fact All for Science Great love Drowsy Hazardous Goods transport Centenary drink The Philosopher s stone I The Philosopher s stone II Everything seems to be working out! The Philosopher s stone can finally be created but [QUEST_SENDER] needs a vast quantity of Material to do this and asks you to assist him. The Philosopher s stone III It seems jinxed! [QUEST_SENDER] doesn t know where to turn, and time is pressing; the Stars will not wait! The knowledge of dozens of thinkers is required and he needs Books. The Philosopher s stone IV The Philosopher s stone V Quintessence I Quintessence II Quintessence III An old, wise friend of [QUEST_SENDER] s is on his deathbed. The Alchemist cannot accept that and concocts a Potion to try and save him. Fetch him everything he needs. Despite all his efforts, [QUEST_SENDER] must realise that, apart from a singed beard, he cannot achieve anything alone. A friendly Alchemist living in your City must help him. It was presumptuous to believe that a mere man could prevent the inevitable, with or without Alchemy. Pay your final respects to [QUEST_SENDER] s old friend. The Alchemist s thoughts are all focused on the Stars today. A unique stellar alignment is imminent, but [QUEST_SENDER] must be sure. He needs to compare the firmament to his charts of the heavens. The written word has power, but to use it [QUEST_SENDER] requires a vital substance that cannot be found in these climes. An old Map should show you the way. It is done! [QUEST_SENDER] has created the Philosopher s stone and can now produce Gold. But the Stone is no longer safe here; escort it to a secret location. Burning Stones Grail in green From Heaven above Big jump Who sows wind Icarus FunctionQuests Liefer_Bauer I Liefer_Bauer 2 Liefer_Bauer 3 Liefer_Bauer4 Liefer_Bürger 1 Liefer_Bürger 2 Liefer_Bürger 3 Liefer_Bürger 4 Liefer_Bürger 5 Liefer_Bürger 6 Liefer_Patrizier 1 Liefer_Adel 1 Liefer_Adel 2 Liefer_Adel 3 Liefer_Adel 4 Liefer_Adel 5 Liefer_Patrizier 2 Liefer_Patrizier 3 Liefer_Patrizier 4 Liefer_Patrizier 5 Liefer_Patrizier 6 Liefer_Patrizier 7 Liefer_Patrizier 8 Liefer_Adel 6 Liefer_Adel 7 Liefer_Adel 8 Liefer_Adel 9 Liefer_Adel 10 Liefer_Adel 11 Liefer_Adel 12 Helperquests FirstSelection 錬金術師の実験 特定の物品を提供すると、錬金術師が実験を行ってくれます。 [QUEST_SENDER] とその助手たちは、明けても暮れても錬金術のレシピについて研究しています。錬金術師の塔と交易所を道で繋いで、この施設を利用しましょう。[CR]実験を開始するには、特定の物品が必要です。物品の量が多いほど、成功率が上がります。[CR]注意 気まぐれな錬金術師が実験するので、いつも期待通りの結果になるとは限りません... 貴方が私の実験に必要な物品を提供してくれる使者なのか...? 貴方が私の実験に必要な物品を提供してくれる使者なのか...? NB_02 Old tree 5306000 Profil [THIRDPARTY_SENDER_PLAYER] とその姉妹たちに寄付をすると、あなたを疫病から守ってくれます。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、異教の祈りに忙しそうです。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちが疫病からあなたを守ってくれるには、特定の材料が必要です。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、[THIRDPARTY_CITY]の街に疫病が発生することを予見しています。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、[THIRDPARTY_CITY]の街が炎に包まれることを予見しています。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、[THIRDPARTY_CITY]の街が竜巻の危険にさらされていると予見しています。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、あなたが新しい同盟国を見つけることを予見しています。 [THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、戦いが迫っていることを予見しています。 Quests StandardQuests Foreboding The Grand inquisitor Witch hunt Famished Drowning drinks Race against time Dishonest Nobleman The Recipe for the Magic potion [QUEST_SENDER] has learned of a Witch in your City who claims to be the famous fourth Witch and earning a great deal of Money from it! This fraudster must be found and taken to task. The fourth sister I The fourth sister III The fourth sister II [QUEST_SENDER] has learned of a stricken Oriental trading ship carrying Herbs and Spices. The Witches are very interested in these Goods and would be much obliged if you could repair the Ship so it can sail again. Exotic Herbs A Crate was washed ashore containing [QUEST_SENDER] s old Recipes, without which the Witches cannot produce their remedies. This would surely be to the detriment of many. Old Recipes Explosive Goods Renovation work Family legacy A Vizier has assigned an important task to [QUEST_SENDER] and her sisters. They must create some unusual fireworks for a grand firework display. They will require the help of three Alchemists from your City. The firework display I The work on the firework display is progressing well, but they are still lacking a certain something. A fireworks expert lives on an lonely Island and [QUEST_SENDER] asks you to fetch him. The firework display II The hermit Chief blaster is amazed at the work [QUEST_SENDER] has carried out up to now, but needs some specific Items for what he is planning. These are lacking and must be supplied before he can do anything. The firework display III It is finished at last! [QUEST_SENDER] s fireworks are ready. However, hookahs and fireworks do not mix. The Vizier s ship is badly damaged and you must go and help him to at least save the Crew. The firework display IV All in vain. [QUEST_SENDER] will have to start again from scratch. Luckily they now know how to make the fireworks, but they are still lacking some important Ingredients. The firework display V [QUEST_SENDER] hands you over the precious Cargo, as she can be sure you will deliver the Goods safely to the Vizier s Palace. Don t disappoint the Witches! The firework display VI Helperquests FirstSelection 4999 魔法使いの守り 魔法使いの魔法により、病気のリスクを減らすことができます。 魔法使いたちは天地創造以来、秘密の魔法を培ってきました。古の大木と交易所とを道で繋いで、彼女たちの協力を得ましょう。[CR]特定の物品を継続的に提供することで[QUEST_SENDER]は魔法を唱え、病気を防ぐことができます。 おお、そなたはこの魔法を必要としているのか! そうね、この魔法にはある材料が必要なの。そうよね、妹たち? おお、そなたはこの魔法を必要としているのか! そうね、この魔法にはある材料が必要なの。そうよね、妹たち?[CR] [CR][THIRDPARTY_SENDER_PLAYER] とその姉妹たちは、物品を提供してくれれば病を防ぐ魔法をかけてくれると言っています。 NB_03 Assassins fortress 5309000 Profil [THIRDPARTY_SENDER_PLAYER] は、新しい暗殺者を訓練する時間がもう少し必要です。 [THIRDPARTY_SENDER_PLAYER] は、優秀な暗殺者をあなたの軍に派遣しました。 [THIRDPARTY_SENDER_PLAYER] は、指定の量の物品を提供してもらう必要があると言っています。 [THIRDPARTY_SENDER_PLAYER] は新しい軍を訓練しています。 Quests StandardQuests Tactical retreat The art of War Honourable Quest Just our luck Delayed Perjury Too much work The renegade Forbidden knowledge Day of blood The Ship belonging to one of [QUEST_SENDER] s important Alliance partners was attacked and sunk. The Castaway must be rescued immediately and taken to the Assassins fortress. The rescued Alliance partner is on the road to recovery, but would like to return to his native land. [QUEST_SENDER] wants you to escort him to fend off any further attacks. The Ally II The Ally I Watery grave Cowardice in the face of the enemy Renegade Balance of power Betrayal! Dangerous Quest Some theses written by a Monk from your City have angered [QUEST_SENDER] s men, as these fundamentally contradict the Assassins code. Urgent clarification is required and the Monk must justify himself. Code and Faith I Despite the Monk s assertion that he never intended to attack the Assassins code, [QUEST_SENDER] s men are still distrustful. A veteran Assassin in your City must persuade them see reason. Code and Faith II The path of the Warrior I The Assassins are the most fearless fighters in the Orient, but superb warriors don t grow on trees. Hard work, iron discipline and strong Faith are essential qualities. [QUEST_SENDER] needs some new disciples! The path of the Warrior II Disguise and deception are among the most important of the Assassins commandments. [QUEST_SENDER] needs your assistance to create a special disguise for his Novices. The path of the Warrior III Al Zahir s imminent feast is the perfect opportunity to test the art of disguise. Smuggle the "ladies" in among the guests and, once they have passed their "baptism of fire", return them to [QUEST_SENDER]! The path of the Warrior IV The Assassin training is nearly finished. [QUEST_SENDER] s Novices must now use the knowledge they have gained. They will be left on an Island alone, where they must survive all the hardships and privations. The path of the Warrior V The path of the Warrior VI [QUEST_SENDER] has received word that all the Novices have come through the test with flying colours. Pick the trained Assassins up from the Island so they can swear an oath of loyalty to [QUEST_SENDER]. While the warrior cadets are living rough on the Island, Al Rashid wants to have the Weapons ready which will turn them into true Assassins. Deliver the Raw materials required to do this. Helperquests FirstSelection 暗殺者 特定の物品を提供すると、暗殺者を採用することができます。 [QUEST_SENDER] と彼の暗殺者たちは、悪名高い戦士です。暗殺者の砦と交易所とを道で繋ぐと、暗殺者たちの協力を得ることができます。[CR]建物メニューから軍隊を訓練すると、暗殺者の軍隊を作ることができます。 我々の力が欲しいのか? そうだな、報酬さえ払ってもらえればいい。 我々の力が欲しいのか? そうだな、報酬さえ払ってもらえればいい。[CR] [CR][THIRDPARTY_SENDER_PLAYER] は、物品を提供しれくれれば協力してくれると言っています。 NB_04 Mountain monastery 5303000 Profil [THIRDPARTY_SENDER_PLAYER] はロバをしばらく休ませて欲しいと言っています。 [THIRDPARTY_SENDER_PLAYER] はロバを出発させました。 [THIRDPARTY_SENDER_PLAYER] のロバは移動中です。 Quests StandardQuests Tribute for the Sea His own fault… Precious wet Open to new things Alcohol at the helm Incredibly dangerous! Illumination The missing Monk [QUEST_SENDER] would like to find a new recipe for Beer and requires some exotic ingredients. The strong Beer will be produced for particularly festive occasions. Special brew I The new recipe is a great success! [QUEST_SENDER] asks you to safely escort a delivery of the strong brew to this year s Beer festival, and to ensure that not a single drop is spilled. Special brew II Supply bottleneck Monk in the Barrel Ordeal at Sea Washing the Word of the Lord Secret passages The best Herbs Expanding the Monastery [QUEST_SENDER] is very pleased with the work carried out by a particular Sister, who would make an excellent Abbess for one your Monasteries. Escort a Messenger to the Imperial city with [QUEST_SENDER] s request. The Nunnery I The request was very well received in the Imperial city. [QUEST_SENDER] now asks you to find the chosen Nun in your City, and bring her to him. The Nunnery II The Nun and [QUEST_SENDER] have selected a remote Island on which to build the Nunnery. Organise an Expedition there and take a detailed Map with you. The Nunnery III The Nunnery IV The Island appears to be the perfect site for the Monastery. [QUEST_SENDER] would like to host a large feast to wish the Nun farewell, and is hoping for your support. Helperquests FirstSelection 修道院 修道院にいる [QUEST_SENDER] は、あなたと取引をしてくれます。 [QUEST_SENDER] とその修道士たちは、幅広い物品を修道院の庭や仕事場で生産しています。修道院と交易所とを道で繋いで、取引ができるようにしましょう。[CR]建物メニューから、購入したい物品を選択してください。すぐにキャラバンが出発し、注文の品を届けてくれるでしょう。 神よ、誰かが訪ねてきたようだ。ひょっとして我々が作っている品物に興味があるのであろうか? 神よ、誰かが訪ねてきたようだ。ひょっとして我々が作っている品物に興味があるのであろうか?[CR] [CR][THIRDPARTY_SENDER_PLAYER] はあなたと取引できることを喜んでいます。 NB_05 Caravanserai 5300000 Profil [THIRDPARTY_SENDER_PLAYER] はラクダを出発させました。 [THIRDPARTY_SENDER_PLAYER] はラクダを休ませる時間が欲しいと言っています。 [THIRDPARTY_SENDER_PLAYER] のキャラバンは移動中です。 Quests StandardQuests Trade with the Bedouins Talk is cheap Floating Treasures The ramshackle Ship Escort Rival Traders Deadline The Goods whisperer Ocean raiders Goos from the Far East Pieces of a wreck New Paths [QUEST_SENDER] has commissioned an Architect from the Occident to upgrade and fortify his Caravanserai. Unfortunately, the Ship sank during the crossing. Can you find the Architect and bring him safely to his destination? The expansion of the Caravanserai I The Architect feels uneasy among so many foreigners. [QUEST_SENDER] is anxious and assigns you the task of finding a Knight in your City to protect the Architect. The expansion of the Caravanserai II The Architect has prepared the plans for the upgrade. [QUEST_SENDER] himself will build it, as he wants to be rid of the unhappy Architect. However, he requires the appropriate Goods to build it. The expansion of the Caravanserai III The weathered Treasure map The Assistant from [QUEST_SENDER] s Caravanserai has vanished with all the important financial statements. He must be on one of the Islands indicated by [QUEST_SENDER]. Mount a search party! The disloyal Assistant I You have found the Assistant. He tells [QUEST_SENDER] you that he was kidnapped by the Corsairs and was then thrown into the Sea. He is incensed, and asks you to set out in pursuit of the Corsairs. The disloyal Assistant II The Corsair leader is angry to learn that his Ships are being pursued. It appears that Assistant was lying. [QUEST_SENDER] was tricked, but the Corsairs are out for revenge. Help break their Naval blockade. The disloyal Assistant III The disloyal Assistant IV [QUEST_SENDER] seems to have really done the Corsairs an injustice the Assistant tries to escape again with some Treasure. Sink the devious snake s Ship! Enterprising Helperquests FirstSelection 外来品 キャラバンを運営する [QUEST_SENDER] は、外来品を提供してくれます。 [QUEST_SENDER] は珍しい物を取り扱うことで有名です。キャラバン宿と交易所とを道で繋いで、彼と取引できるようにしましょう。[CR]建物メニューから、購入したい物品を選択してください。キャラバンがすぐに注文の品を届けに出発してくれるでしょう。 おお、いらっしゃい! ちょっとうちの商品を見ていかないかい? おお、いらっしゃい! ちょっとうちの商品を見ていかないかい?[CR] [CR][THIRDPARTY_SENDER_PLAYER] はあなたと取引できることを喜んでいます。 NB_06 Excavation site 5304000 Profil [THIRDPARTY_SENDER_PLAYER] は発掘で忙しそうです。 [THIRDPARTY_SENDER_PLAYER] は発掘に成功しました。[CR][THIRDPARTY_REWARD] [THIRDPARTY_SENDER_PLAYER] は発掘に失敗しました。 [THIRDPARTY_SENDER_PLAYER] は、指定の量の物品を提供してもらう必要があると言っています。 [THIRDPARTY_SENDER_PLAYER] は次の発掘までもう少し計画を練る時間が必要だと言っています。 [THIRDPARTY_SENDER_PLAYER] は至急、機材が必要だと言っています。 Quests StandardQuests Sunken Treasure Green-eyed monsters Enlightenment Finders keepers The cost factor! Shipwrecked! Assistant Exploration Map error Ghost! Caught in the trap Forgotten Culture Second opinion A little knowledge is a dangerous thing Lost and found The missing Treasure ship As they lay buried under heaps of dust and dirt for centuries, no one was interested. Yet as soon as these Artefacts were unearthed, everyone began tring to lay claim to them. Help the bonafide finder [QUEST_SENDER]. Tricky I [QUEST_SENDER] is always having difficulties. First, his workers rebelled, then a Crane broke down and now the Treasure he wants to hoist is too heavy for his Ship, and it has developed a severe list. Help! Tricky II Having found a new and more robust Ship, [QUEST_SENDER] wants to leave nothing to chance. You must ensure that the precious Cargo is not stolen. The devil is in the detail I [QUEST_SENDER] has found part of a substantial Treasure. Before he sets out to find the rest, he wants to know that the valuable chest is safe and secure. Protect the Ship! The devil is in the detail II Shortly after the Ship left your Escort, the Inquisition came aboard and searched it. There are some heretical symbols and characters on the Chest s jewel-encrusted strap. Having been accused of heresy, [QUEST_SENDER] asks you to find a friendly Monk. The devil is in the detail III The Inquisitor remains convinced of [QUEST_SENDER] s guilt. The only alternative is to salvage the remaining Treasure to prove that the symbols and characters belong to an ancient Civilisation. The devil is in the detail IV The Inquisition remains doubtful of [QUEST_SENDER] s innocence and, as a punishment for having attempted to mislead the Clergy, [QUEST_SENDER] must bear all the legal costs. In solid Gold. Can you help? FunctionQuests Liefer_Bauer1 Liefer_Bauer2 Liefer_Bauer3 Liefer_Bauer4 Liefer_Bürger1 Liefer_Bürger2 Liefer_Bürger3 Liefer_Bürger4 Liefer_Bürger5 Liefer_Bürger6 Liefer_Patrizier1 Liefer_Patrizier2 Liefer_Patrizier3 Liefer_Patrizier4 Liefer_Patrizier5 Liefer_Patrizier6 Liefer_Patrizier7 Liefer_Patrizier8 Liefer_Adel1 Liefer_Adel2 Liefer_Adel3 Liefer_Adel4 Liefer_Adel5 Liefer_Adel6 Liefer_Adel7 Liefer_Adel8 Liefer_Adel9 Liefer_Adel10 Liefer_Adel11 Liefer_Adel12 HelperQuests FirstSelection お宝発掘 特定の物品を提供すると、発掘を開始することができます。 [QUEST_SENDER] は、いつもどこかに埋まっているお宝を探しています。発掘現場と交易所とを道で繋げて、発掘に協力しましょう。[CR]建物メニューから、必要な物品を選択して発掘を開始してください。物品が多いほど、成功率が上がります。[CR]注意 いつもお宝が見つかるとは限りません! ああ、他のお宝ハンターかい... 我々も加わっていいだろうか? 私は発掘し、君は資材を提供する… ああ、他のお宝ハンターかい... 我々も加わっていいだろうか? 私は発掘し、君は資材を提供する…[CR] [CR][THIRDPARTY_SENDER_PLAYER] は発掘プロジェクトの支援を待っています。 NB_07 Black castle 5308000 Profil [THIRDPARTY_SENDER_PLAYER] は新しい軍を訓練する時間が必要です。 [THIRDPARTY_SENDER_PLAYER] は最強の盗賊たちを配置しました。 Quests StandardQuests The gap Landlubbers The new axe Support The coward Flaming arrow Morning terror Abduction of the women A shared burden is half the burden Wounded I [QUEST_SENDER] was seriously wounded during his last raid as pure greed made him force his way into a Treasure chamber. A Herb woman who has been seen in your Settlement should be able to provide some treatment. Wounded II The Herb woman urgently needs some dressings. Most of the cuts will heal quickly, but some stab wounds to [QUEST_SENDER] s body are causing her some concern. Wounded III [QUEST_SENDER] is now fully recovered. The Herb woman has performed a great service and should be richly rewarded. A few very rare Ingredients were seen floating on the high sea; a Trader must have lost them. Missed opportunity? Challenged Enigmatic The luck of the dice The gauntlet The attendants The Arsenal I [QUEST_SENDER] is widely known as a lover and collector of Weapons. Practically every Weapon imaginable can be found in the halls of his Castle. He now wants to replace some very old and battered pieces. The Arsenal II [QUEST_SENDER] has been searching for a specific Weapon for some time a Handgun. It so happens that there is a Ship nearby with just this type of Weapon on board. What a good opportunity to impress [QUEST_SENDER]. The Arsenal III [QUEST_SENDER] s Arsenal is almost complete. However, before he can receive the Assassins revered Blood sword, he must perform a certain ritual. A veteran of the Assassins capable of performing that ritual is staying in your City. The Arsenal IV A final piece of oriental Warfare will complete [QUEST_SENDER]’s collection. The Corsairs have a Ballista, which rains poison arrows down on the enemy. As luck would have it, Corsair ships are just sailing by the Coast.
https://w.atwiki.jp/clickvip/pages/514.html
6 songs from Japan(English) 日本の6曲 台灣の6曲 ハンガリーの6曲 JapaneseSetlist TaiwaneseSetlist HungariesSetlist "Natsu Maturi(Summer festival)" by Whiteberry hanocha6552.jpg Whiteberry is a girls band by 5 girls from Hokkaido. They formed in 1994 which they were 3-4 grade in elementary school, they came out in 1998 which have came 15-16 years old, they dispersed at the time of the graduation from high school in 2004. "Natsu matsuri" (Aug. 2000), their 3rd single, is the cover song of the same name song which JITTERIN JINN released in 1990, and it became the greatest hit song for Whiteberry. This music is used as music which heaps up games in a professional baseball team "Tokyo Yakult Swallows", "Fukuoka Daiei Hawks", and "Yomiuri Giants", and it is also used for the rooter s song of high-school baseball, so it is a song with deep familiarity in baseball fans, too. The words of the song are recollecting a summer festival spent with a lover at the young time of being now separated. The place where the good melody of riding put together with ska beat changes to lining by climax is impressive. Wikipedia Eng Whiteberry Youtube Whiteberry ver Youtube JITTERIN JINN ver "Music hour" by PornoGraffitti hanocha6553.jpg PornoGraffiti is a rock band made of two persons, Akihito Okano and Haruichi Shindo. Abbreviated name is "Porno." In order to make the name into a name with impact, it is what was taken from the album name of the 2nd work of extreme, and spelling also follows it. The debut single "Apollo" released in 1999 made a long hit, and it is one of the popular bands by the melodious pop lock number still now. While the songs are kind of a rock, the words of Japanese of a friendly colloquial style are characteristic. "Music hour", their 3rd single, is made of the unique lyrics that DJ of radio answers to the postcard of the love consultation which arrived from listeners. It was used for TVCM of the drink "POCARI SWEAT" in 2000. With its bright music tone, now, it is one of the time-tested music of summer. Wikipedia Eng Porno Graffitti Wikipedia 中文 Porno Graffitti "Touch" from TV Animation "Touch" hanocha6554.jpg Touch is boys comics that is serialized in the magazine Sunday between 1981 and 1986, and is broadcasted the TV animation program between 1985 and 1987, and made explosive booms. It s baseball comic story that twin brothers and their childhood friend s girl get over the death of the twin younger brother, and they aim at the Koshien participation to realize his dream. At the same time,It s a love story that drew the love of the heroine and the hero. Mituru Adachi s not passionate hero , detached tone ,and Story that makes love the main theme... In boys comics market witch Nekketu-Supokon (Story of this genre is roughly that A passionate hero improves the skill of sports by spirit.) was the main genre that time,his expression looked fresh for reader,and was supported by not only the boy but also a woman and a wide generation. Baseball was the most popular sports in Japan for years. And the occupation of the yearning for boys was a professional baseball player for years. All-Japan Senior High School Baseball Championship Tournament have held from 1915, and the game is reported by the national newspaper and is broadcast the TV. It is one of the interesting, Non-official national events every year for a lot of baseball nuts. Though 20 years or more passed after broadcasting ends, Touch is well-known still now. The theme song of Touch is used frequently for the assistance song of each school in high school baseball, and is now one of the standard tunes. singer Yoshimi Iwazaki sang seven of nine songs used for ED OP in TV animated cartoon "Touch". Her singing voice also contributed very well to make animated cartoon "Touch" to popular. Wikipedia english Touch Wikipedia 中文 Touch Youtube "Sunny Day Sunday" by SENTIMENTAL BUS hanocha6555.jpg SENTIMENTAL BUS is a music unit by two of vo.Natuyo Akabane and key.Aki Suzuki. alias SENTIBA . "Sunny Day Sunday" released in 1999 samples a lot of sound effects of TV animation Kyojin-no-Hoshi(Giant s star) , and the theme of this PV is assistance of baseball. It was used for CM of sports drink "Pokari", and it is one of the standard tunes of assistance by each school in summer All-Japan Senior High School Baseball Championship Tournament now. Youtube "Sekai de Ichiban Atsui Natsu(THE HOTTEST PLACE ON THE EARTH)" by PRINCESS PRINCESS hanocha6556.jpg "PRINCESS PRINCESS" is a rock band that consists of five women, and they acted from 1983 to 1996. They were nicknamed "PURI PURI". They were the first rock band to succeed on the world of Japanese pops where the women s rock bands had had difficulty in success. And they have had many hit-songs. "Sekai de Ichiban Atsui Natsu" is their second single, but it scarcely sold because they had been not popular. After they became popular in 1989, it was revalued because it had sold again. And it won first prize in the Oricon Chart Ranking. The song is taking root among people as one of the standard song of summer at present. Wikipedia english PRINCESS PRINCESS Wikipedia 中文 PRINCESS PRINCESS Youtube "Natsu Iro (Color of summer)" by Yuzu hanocha6558.jpg "Yuzu"(the citrus fruits yuzu orange) is folk duo of two men. Twin vocal twin guitar is their styles, and Harmony of them is excellent. they who were the classmates in the junior high school started the music activity on the road together when becoming a high school student , and they became popular as gathering of about 7500 people on the last live on road done in 1998, and achieved the independent music debut in 1997. 1st album "Yuzu no moto"(Source of the yuzu orange) was recorded all tunes on the road. "Natsu Iro (Color of summer)" is 1st singles of them released in 1998. The hit of this tune became the chance of the fork revival of Japan that declined after the 70 s, and they established new genre that was called "Neo fork". This tune is loved as a standard tune of summer by a lot of young japanese people now. Wikipedia English Yuzu Wikipedia 中文 Yuzu Youtube
https://w.atwiki.jp/mrfrtech/pages/16.html
Market Overview The Global Virtual Dressing Room Market is expected to cross USD 6.81 Billion by 2025 at a CAGR of 15.21%. Virtual dressing rooms are able to superimpose clothes on users and induce a purchase intent in customers. The technology has made use of augmented reality to help customers in their shopping experience and save time on decisions. The global Virtual Dressing Room Market report by Market Research Future (MRFR) has been conceptualized for clothing stores and malls looking to increase their sales over the forecast period (2020-2027). The COVID-19 pandemic has been included to predict growth and revenue trajectories. This is attributed to preference of shopping online and new customer experience journeys for retaining customers. Large number of online apparel stores and increased purchasing power of customers can influence the market growth. Benefit over traditional dressing rooms and use of augmented reality to purchase clothes to attract new generation of customers can propel the market size. Innovations such as mobile body measuring, AR, and try-on technology can disrupt the market positively. This is exemplified by rapid purchases of technological breakthroughs by large companies to expand their footprint in cosmetics and apparel. The technology can store customer preferences and customer measurements to display clothing and accessories of their liking. But lack of awareness of the product in developing countries can hamper market growth. Request a Free Sample @ https //www.marketresearchfuture.com/sample_request/8294 COVID-19 Analysis The onslaught of the COVID-19 pandemic had slowed down the apparel sector mainly, but many brands are now resorting to virtual based selling methods, and this is estimated to benefit the virtual dressing room market trends in the approaching period. The use of virtual dressing rooms is estimated to gain impetus further due to the protection it provides to the merchandise that is displayed in the shops, thus, promoting the virtual dressing room market share. Segmentation By Component The global virtual dressing room maker is divided into solutions and services by component. Of the two, solutions have the larger market size. Solutions are important within the market since every retailer has a specific requirement for virtual dressing rooms along with different investment potential. Their customer base, the preference of their customer base, the amount of capital retailers are ready to invest along with a host of other factors must be considered before a unique virtual dressing room solution can be created for the retailers. Services is the smaller market within this segment but is as critical as solution. Services oversee the maintenance and customization of the offered virtual dressing room solutions. In today’s dynamic commercial landscape, shifting customer preferences, the introduction of new products, and the opening of new markets results in a need to customize existing solutions. This is where services come in. By End User The E-commerce virtual dressing room market is the fastest growing within this segment due to its affordable pricing, unique solutions, and extreme utility. Cloth retailers of all sizes can now avail of the benefits of the huge e-commerce market and customer base. The advances in logistics ensure that the retailers can market their products to virtually any corner of the globe. The only drawback to the sale of clothing online was the lack of a mechanism to try the clothes on. This impediment is easily removed by virtual dressing rooms, a fact that retailers across the globe are quick to take note of. The physical store virtual dressing room market must increasingly compete with its e-commerce counterpart. Physical stores offer virtual dressing rooms with many factors that are unavailable to e-retailers. This is due to the customization available in the virtual dressing room machines which can range from simple screen outputs to huge screens that monitor the movements of the customer and offer changes in dress size, shape, and color at the behest of the customers. Regional Analysis North America to be Lucrative for Global Virtual Dressing Room Market North America is deemed to be revenue-worthy for the virtual dressing room market owing to presence of recognizable fashion stores and influence of social media to create peer pressure for looking good. Effective use of data to attain repeat customers and drive loyalty membership programs can bode well for the market. Competitive Analysis The emphasis on innovation is estimated to rise in the coming years, as the consumer needs have to be addressed in a better manner to ensure the resurgence of the global market. Also, the need to encourage business to include the environmental impact of their decisions is estimated to shape the development of the market in future. The need to mitigate losses sustained by the current public health crisis is estimated to be the sole focus of the market contenders in the upcoming years. The disharmony in the forces of demand and supply is estimated to create a slow growth background in the market. Furthermore, the need to adopt a rapid and cost-effective method of operation is estimated to shape the market in the impending period. The capability of contenders to influence change in the market is increasing at a stable rate in the impending period. The support from government bodies around the world is rising because the market needs an extra stimulus to achieve normalcy in such a scenario. Fitle, Elpro Technologies, ELSE Corp srl, Fitnect Interactive, 3D-A-PORTER LTD., 3DLOOK Inc., Coitor IT Tech, REACTIVE REALITY GMBH, SIZEBAY, Dressformer, Fit Analytics, SenseMi, triMirror, Zugara, Inc., and True Fit Corporation are reputed players in the global market. Mergers, acquisitions, and continuous development of technology are major growth strategies of players. Industry News Walmart has acquired Zeekit, a startup in Israel, in an attempt to attract customers towards its site and virtually try on clothes to drive purchases. Access Report Details @ https //www.marketresearchfuture.com/reports/virtual-dressing-room-market-8294 Table of Contents 1 Executive Summary 2 Scope of The Report 2.1 Market Definition 2.2 Scope of The Study 2.2.1 Research Objectives 2.2.2 Assumptions Limitations 2.3 Market Structure Continued… Similar Report** https //market-research-future.tribe.so/post/forensic-accounting-market-enormous-growth-with-recent-trends-demand-by-top--6220bd59d9cf5f4d8b4a0b3e https //ict268262635.wordpress.com/2022/04/08/infrastructure-as-a-service-industry-magnificent-growth-with-an-impressive-cagr-changing-business-needs-factors-that-will-drive-industry-forecast-year-2030/ https //ict268262635.wordpress.com/2022/04/08/telecom-expense-management-market-size-magnificent-growth-with-an-impressive-cagr-changing-business-needs-factors-that-will-drive-industry-forecast-year-2030/ About Market Research Future At Market Research Future (MRFR), we enable our customers to unravel the complexity of various industries through our Cooked Research Report (CRR), Half-Cooked Research Reports (HCRR), Raw Research Reports (3R), Continuous-Feed Research (CFR), and Market Research Consulting Services. Contact Market Research Future (Part of Wantstats Research and Media Private Limited) 99 Hudson Street, 5Th Floor New York, NY 10013 United States of America 1 628 258 0071 (US) 44 2035 002 764 (UK) Email sales@marketresearchfuture.com Website https //www.marketresearchfuture.com #market #research #industry #data #growth #trend #report #analyis #share #marketing #forecast #digital #geographic #demographic #gnews Plugin Error キーワードを入力してください。 #tech #researchreport #marketreport #futrue view Report Video https //lumen5.com/user/ubellapranali/parking-management-m-f4kz6/
https://w.atwiki.jp/kojiro/pages/564.html
PRECISION
https://w.atwiki.jp/mrfrtech/pages/70.html
Market Highlights Cloud database is a database service which can be used in storing and managing files through the cloud. Enterprises can host databases on the cloud without access to hardware. The ability to scale business at a rapid pace using cloud is likely to lead to its adoption by businesses of all sizes. The global Cloud Database Market Growth report compiled by Market Research Future (MRFR) evaluates various growth opportunities and trends amid the COVID-19 pandemic and changes in business models for the period of 2020 to 2027 (forecast period). Market Scope The global cloud database market is expected to reach USD 21.66 billion growing at 46.78% CAGR over the forecast period. The advent of internet of things (IoT) and rise of cloud computing are major drivers of the market. Implementation of cloud databases for improving service, lowering cost, and expediting services can benefit the market. Rise in digitization of data and the move towards cloud by organizations of all sizes can be a golden opportunity for cloud database providers. Request a Free Sample @ https //www.marketresearchfuture.com/sample_request/6847 Rise of application development and mass computing can drive the adoption of cloud databases by organizations making it easier for app developers in storing, migrating, and sharing data. The virtual nature of cloud databases allow it to recover from crashes and failures in programs quicker and the disposability nature can drive the market demand in the global cloud database market. It can cover machines and entire data centers. But concerns of data security can impede market growth. Competitive Outlook SAP AG, CenturyLink, CSC (Computer Science Corporation), Salesforce.com Inc., Google Inc., Oracle, Amazon.com, Rackspace Inc., IBM, and Microsoft are key players in the global cloud database market. Segmentation By database, the cloud database market is divided into SQL database and NoSQL database. By model, this market is segmented into service model and deployment model. By service model, the market is further segmented into private cloud, virtual private cloud, public cloud, and hybrid cloud. Deployment model segmentations include infrastructure as a service (IaaS), database as a service (DBaaS), and platform as a service (PaaS). By deployment model, the DBaaS segment can provide security to data with tight surveillance and software upgrades designed to maintain the integrity of data stored in the database. By component, the market is segmented into software and service. By software the market is segmented into database application builder, database encryption, data scaling and replication, backup and recovery, and others. By service, the market is segmented into training and consulting service, system and network integration service, and deployment and maintenance service. By organization size, the market is segmented into large enterprise and small and medium-sized enterprise. By end-user, the market is segmented into academic, BFSI, healthcare, IT and telecom, government, and others. Regional Analysis The regional analysis of cloud database market is considered for North America, Europe, Asia-Pacific, and the rest of the world. Implementation of IoT and increasing adoption of cloud-based services in North American countries such as the US and Canada is expected to dominate the cloud database market during the assessment period. Several investments and research and developments are taking place in the US owing to the increasing need for cloud database by the IT companies. This in turn ensures an enhanced cloud infrastructure coupled with the provision of network security for the cloud database users. Increase in the adoption of security based applications in Asia-Pacific is expected to enhance the cloud database market. Hence, Asia-Pacific is expected to be the fastest growing region in the market during the forecast period. Europe is expected to witness a significant growth in the market owing to the growing need for managed database solutions from the prominent IT companies investing in the European markets. Brows Full Report @ https //www.marketresearchfuture.com/reports/cloud-database-market-6847 Table of Contents 1 Executive Summary 2 Scope of The Report 2.1 Market Definition 2.2 Scope of The Study 2.2.1 Research Objectives 2.2.2 Assumptions Limitations 2.3 Market Structure Continued… Similar Report** B2B Telecommunication Market Information by Solution (Unified Communication and Collaboration), Deployment (Fixed, Mobile), Organization Size (Large, Enterprise), Application (Industrial, Commercial) and regions Trending #MRFR Report** https //ictmrfr.blogspot.com/2022/04/geofencing-market-companies-growth-with.html https //blogfreely.net/pranali004/telecom-expense-management-market-size-impressive-cagr-changing-business-scope https //postheaven.net/pranali004/financial-app-industry-impressive-cagr-changing-business-needs-scope-of https //market-research-future.tribe.so/post/openstack-service-market-research-impressive-cagr-changing-scope-of-current--6263de46791566c10c79891e https //www.scutify.com/articles/2022-04-24-infrastructure-as-a-service-industry-cagr-changing-business-scope-of-current-and-future-industry- About Market Research Future At Market Research Future (MRFR), we enable our customers to unravel the complexity of various industries through our Cooked Research Report (CRR), Half-Cooked Research Reports (HCRR), Raw Research Reports (3R), Continuous-Feed Research (CFR), and Market Research Consulting Services. Contact Market Research Future (Part of Wantstats Research and Media Private Limited) 99 Hudson Street, 5Th Floor New York, NY 10013 United States of America 1 628 258 0071 (US) 44 2035 002 764 (UK) Email sales@marketresearchfuture.com Website https //www.marketresearchfuture.com
https://w.atwiki.jp/animescriptstorage/pages/30.html
Death Note 02. Confrontation (classroom) TEACHER He found himself overwhelmed with happiness and satisfaction, knowing that at long last his dream had finally come true. GIRL I have no idea of what he was thinking, coming to my house, but I am so through with him. BOY Seriously? So what happened with your Dad after that? TEACHER All right. Then, Yagami? LIGHT Huh? TEACHER Please recite this line for us. LIGHT Sure. Having finally made his dream a reality, he was overwhelmed, both by the magnitude of his achievement and by the joy and happiness that were brought to him. TEACHER That was very well-done. But I'm not surprised, of course. Absolutely flawless. Very good. TEACHER Well then. I'll leave it at that for today. BOY So you got... RYUK I thought it would never end. How do you do this every day? It's so boring here. Hey, where are you going? RYUK Hey, Light, are you listening to me? LIGHT Don't talk to me. Unlike you, people can still hear me when I talk out loud. RYUK Heh, well, aren't you boring. BOY Hey, what's up, Light? We were just gonna head down… LIGHT Sorry. I'm a little busy today. RYUK You don't have anything to do. Aren't you just gonna go home and hang out in your room as usual? LIGHT What are you talking about? Of course I have something to do. Yes. Something very important. (Light's room) TV announcer There was more violence across the city today. Another stabbing. This time at a restaurant in the heart of the Kabuki-cho district of Shinjuku, following... RYUK Hey, Light. I'm talking to you. LIGHT What is it? RYUK Why are you working so hard? LIGHT I can't afford to waste any time. I have a very small window to write names in this notebook. I only have from when I get home from school until I go to bed. I still need to sleep so I can maintain my average and stay at the top of my class. Obviously I can't be sleeping in class, plus there's all the studying at home and at cram school. I can't let myself get too tired. It will start to affect my health and my mental performance. If I'm serious about trying to create an ideal world that's free from evil, then I need to make the most of my time. SAYU Huh? Weird. Hey, Light, what's going on? Why is your door locked? LIGHT It's Sayu. What is it? SAYU Can you help me with my homework? LIGHT Er. Yeah. OK. SAYU We're doing quadratic equations in math. Sorry to interrupt. I know you're studying right now. But I'm like the only person in my class who doesn't get this stuff. Thanks so much. LIGHT No problem. RYUK I'd be careful if I were you. If anyone else touches that notebook you've got hidden in the drawer right now, they will be able to see me, too. LIGHT Huh? He waits till now to mention that important detail? Damn Shinigami. SAYU What's wrong? Are you all right? LIGHT Hm? It's nothing. So, what exactly don't you understand? What are you stuck on? SAYU Er...well...I think all of it. (ICPO) MAN There've been fifty-two deaths that we're aware of and that's just in the past week. MAN Every single one of them involved a heart attack. MAN They were all criminals who were either being held in prison or who were wanted by police for outstanding crimes. And I think it's safe to say there are other criminals whose deaths are unaccounted for. MAN In which case the death toll could be well over one hundred. MATSUDA Oh, morning, chief. They started the meeting without you. SOICHIRO That's fine. I had to take an urgent call from headquarters. MAN At any rate, these were criminals who were probably facing executions sooner or later. Perhaps we shouldn't... MAN Why should it matter whether it's a criminal or someone innocent? Last time I checked, murder was still murder. MAN It's still too early to consider these a homicide. MAN Then how did all these people have heart attacks at the exact same time? That's not coincidence. It's murder. MAN You think it's possible to simultaneously kill all these people in different locations. MAN We're treating this as an elaborate murder plot that's been carried out by a large organization. MAN If it is a large organization, I'm sure I'm not alone in suspecting the FBI or CIA. MAN I dare you to say that again! MAN Now, now. This is not the time to be joking around. MAN We need to confirm that these are indeed homicide and not coincidences. MAN How? MAN Autopsy results show that in all of these cases the victims died of a sudden heart attack. MAN Investigating a series of heart attacks is pointless. I don't see what else we can learn. MAN Absolutely. If these people'd been shot or stabbed, at least we'd have something to go on. MAN If that's the case, it looks as if we'll have no choice but to bring in L. MATSUDA Oh Chief. What's this L they're talking about? SOICHIRO Right. I forgot that it's your first time at this conference. We don't know L's real name or whereabouts. In fact we still don't even know what he looks like. However he's managed to solve every case he's ever taken on. And he's tackled some of the greatest mysteries this world has ever known. He hides in the shadows, but he is the best of the best. Our last resort, our trump card. MAN But I've heard this L is extremely arrogant. I understand he'd only take on cases that he's personally interested in. MAN That's exactly right. Besides, we don't even know how to contact him. WATARI L is already on the move. WATARI Gentlemen. L has already begun his investigation into these incidents. MAN Watari. MATSUDA Ha? Who's that? SOICHIRO That man's the only known person who can contact L. Nobody knows his true identity either. WATARI Please be silent. L would now like to address the delegates. L Greetings to all of you at the ICPO. I am L. RYUK What are we doing here anyway? I don't understand why we are sneaking around this dump. Tell me. LIGHT Isn't it obvious? You told me that anyone who touches the Death Note will be able to see you. I can't afford to carry something this dangerous with me any more. Up until now, I thought that if my family ever saw the notebook, I can tell them I was keeping the records of various criminals in preparation for becoming a detective one day. But I'm walking a very fine line right now. I don't want to think about it, but if I make one mistake, I might end up killing my own family. L The difficulty of this case lies on its unprecedented scope. And make no mistake. We are witnessing an atrocious act of mass murder, one that is unforgivable. This case cannot be solved without the full cooperation of the ICPO. That is all of the police organizations you represent throughout the world. You need to make the decision to fully support the investigation at this meeting. Also I require additional cooperation from Japan's National Police Agency. SOUICHIRO Huh? What? Why Japan in paticular? L Whether this guilty party is an individual or a group, there is a strong possibility that they are Japanese. And even if they are not, we can be sure they're hiding in Japan. MAN What is all this based on? L Why Japan, you ask? I think I will be able to provide you with proof of that after I directly confront the culprit. MAN A direct confrontation? L At any rate, I would like to set up the investigation headquarters in Japan. LIGHT That was easier to make than I thought it'd be. RYUK Ha. Does that mean you were able to hide the notebook? LIGHT Yeah. I hid it right here in this drawer. RYUK But it doesn't seem to be particularly well hidden. You left the key in the lock. LIGHT That's the whole point. I intentionally left the key in the most noticeable place I could think of. RYUK Isn't that just a regular diary? LIGHT That's what it is. I'm guessing that once most people find the diary inside my desk, that'll probably satisfy their curiosity. But the real key is this. Just an everyday item you'd expect to find lying around on my desk. A regular ball-point pen, and all I need is this part. RYUK So that's the key? LIGHT Yeah. If you look closely, you'll find there's a small hole underneath the drawer. Then you just insert this.. RYUK Aha. A fake bottom. The diary would distract most people so I doubt anyone will find it. LIGHT But that's not all. RYUK Hm? LIGHT Even if someone figures out there's a fake base, I've set things up so that there's no way they could get their hands on the notebook. You see, once the ink reservoir is inserted, it accesses an insulator, preventing the flow of electricity around the circuit. When the fake base of the drawer's put back, this piece of rubber also prevents the flow of electricity. However, if someone were to try and force the bottom of the drawer open, the circuit would connect and now would ignite the gasoline contained in this thin plastic case, instantly setting the notebook on fire. The way I've got it set up, all the evidence will be completely destroyed. If I'm ever questioned, I'd say that I was hiding the real diary, because I didn't want anyone to see it. It sounds like a pretty believable excuse. I mean, it is my diary after all. RYUK I've heard of humans finding Death Notes in the past and typically the biggest problem they had was finding a good place to hide it. But you, Light, you're probably the first to have given it this much thought. Though, it's a pretty risky set up from the look of it. If you make even the slightest mistake, you could be badly burned. LIGHT Risky? You say the strangest thing sometimes, Ryuk. This whole thing has been a risk since the very beginning from the moment I obtained the Death Note. I'm sorry, but compared to that, this doesn't even qualify as a risk to me. In fact, it actually protects me. It all comes down to a choice Would I prefer to be executed or deal with a little house fire. ANNOUNCER Last night in the West Tokyo penitentiary, Naoki KoroKitayama, originally sentenced to fifteen years for armed robbery, was reported to have died of a sudden heart attack at the age of 32. This is just the most recent death in the steadily growing number of cases involving inmates dying... STUDENT This is unbelievable. Criminals are dropping like flies lately. STUDENT It's a little scary, but at the same time it's kind of cool. STUDENT Sure. Just make sure you don't do anything bad. STUDENT I won't be surprised if the police were behind this. STUDENT No way. The police don't have that kind of power. STUDENT Don't you know about him? STUDENT Huh? About who? STUDENT Kira. You know, Kira. STUDENT I wonder who's gonna be killed next. LIGHT Ryuk, you should check this out. RYUK Huh? LIGHT Web sites like this are popping up everywhere lately. RYUK The legend of Kira the savior. Huh. Sounds pretty cool. Is this about you? LIGHT Yeah. I think they've taken the name "Kira" from the English word killer. Can't say I'm too happy about that, but it looks like that's the name they've decided to give me. When I search the word Kira, I'm pulling up tons of sites just like this one. The media hasn't picked up on it. They're still calling this a succession of unexplained deaths among the world's most hardened criminals. But the people of the world can already sense that there's something happening. They know there's someone out there passing righteous judgement. RYUK Oh? LIGHT Human beings are like that, Ryuk. Although this would probably never happen in school, let's say that students were asked to discuss whether bad people deserve to die. Well you can bet that everyone will give the politically correct answer. STUDENT It's just wrong to kill people. LIGHT That's what they are bound to say. Of course that's the correct response to give, right? Humans are always trying to maintain appearances when they're in public. That's just how we are. But this is how they really feel. Most are too afraid to support me as they're worried about what others would think. Many would rather deny my existence. But on the Internet, where you can remain anonymous, support for kira is growing. Maybe people are afraid to say it out loud, but they all understand what's happening. Someone's making the bad guys disappear one by one. Those who have done no wrong are cheering for kira in their hearts because they have nothing to fear, while those who have done wrong are on the run. They are forced to hide from an unknown enemy. This is how it should be. It's perfect. Everything is going just like I planned. ANNOUNCER We'd like to apologize for the interruption. As of now we're bringing you a live world wide broadcast from Interpol, ICPO. RYUK Hum? What's this? ANNOUNCER We now take you live to the ICPO. LIND I head up an international police task force which includes all member nations. I am Lind L. Tailor, otherwise known as L. LIGHT What? Who is this guy? SOUICHIRO So this is how it all begins. MATSUDA But Sir, I don't get it. He's never actually shown his face before, right? Why would he choose to do it now? SOUICHIRO It must mean L's serious about this. L, we followed every single one of your orders. Now it's time for you to prove what you said to the ICPO. LIND Criminals around the world are being murdered by a serial killer. I consider this crime to be the most atrocious act of murder in history. I will not rest until the person or persons responsible are brought to justice. Kira, I will hunt you down, I will find you. RYUK He seems certain he'll catch you. LIGHT Hum. That fool. He'll never find me. He'll have to get this first, and as long as the police don't find it, there won't be any evidence to convict me, which means catching me will be absolutely impossible. Hm.. I anticipated that the police would get involved and that something like this might happen. LIND Kira, I've got a pretty good idea what your motivation might be and I can guess what you hope to achieve. However, what you are doing right now is evil. LIGHT You think I'm evil? I am justice! I protect the innocent and those who fear evil. I'm the one who'd become the god of a new world that everyone desires! All those who'd oppose that god, they are the ones who're truly evil! LIGHT I guess you're just too stupid, L. Too bad. This could have been a lot more interesting if you'd only been a bit smarter. I'll show the world what happens when you cross me. The entire world is watching, L... Five more seconds. Four, three, two, one... LIND Ooooh. LIGHT Hahaha. What's wrong? You got nothing else to say? L I had to test this just in case but I, I've never thought it would actually happen. Kira, it seems you can kill people without having to be there in person. I wouldn't have believed it if I hadn't just witnessed it. Listen to me, Kira. If you did indeed kill Lind L. Tailor, the man you just saw die on television, I should tell you that he was an inmate, whose execution was scheduled for today. That was not me. LIGHT What? L The police arrested him in absolute secrecy, so you wouldn't have heard about him on TV or through the internet. It appears not even you have access to information about these types of criminals. RYUK Haha. He got you there. L; But I assure you L is real. I do exist. Now try to kill me. LIGHT You...you bastard. L What's wrong? Hurry up! MAN What the hell is going on? L C'mon. Right now. MAN He's really taking this too far. Are you trying to kill yourself, L? WOMNA What's going on? MAN Look! It's Kira versus L. L What are you waiting for? You've got to do it. MAN The live broadcast is crazy? L Come on! Try to kill me! WOMAN This is freaky. MAN Amazing. MAN Do it, Kira! MAN Someone, stop this! L What's the matter? Can't you do it? Well, Kira, it seems that you can't kill me after all. RYUK Hahaha. L So there are some people you can't kill. You've given me a useful hint. Let me return the favor. I'll tell you something that I think you'll find interesting. Although this was announced as a worldwide broadcast, the truth is, we are only broadcasting in the Kanto region of Japan. I had planned to broadcast this message around the world until we found you, but it looks that won't be necessary. I now know where you are. RYUK Hahaha. This L guy is pretty good. L The police treated your first killing as an unrelated incident, but, in actuality, the first of your victims was a suspect in Shinjuku. Of all the criminals that have recently died of heart attacks, this one's crime was by far the least serious. Furthermore his crime was only ever reported inside Japan. I used that information to deduce this much. You are in Japan. And your first victim was little more than an experiment, which means that you haven't been killing for very long. We decided to broadcast in Kanto first because of its large population, and luckily we found you. To be completely honest with you, I never expected that things would go this well, but it won't be too long now before I'm able to sentence you to death. MATSUDA L has certainly lived up to his reputation. SOUICHIRO Uh, huh. He proved that Kira exists, that the deaths were murders and that he's here in Japan. L Naturally I'm very interested to know how you are able to commit these murders without being present, but I don't mind waiting a little bit longer. You can answer all of my questions when I catch you. Let's meet again soon, Kira. LIGHT Really. He's going to sentence me to death? Sounds interesting. I accept your challenge, L. RYUK Each of them has to hunt down the other without knowing the other's name or face. And the first one whose identity is revealed will die. Humans are so much fun. LIGHT L... L Kira... Light L I will hunt you down wherever you're hiding and I will eliminate you. Light L I am..I am.. justice